This is convert.c in view mode; [Download] [Up]
/* $Id: convert.c,v 3.3 1993/06/28 12:16:59 klute Exp klute $ */
/*
* Copyright 1993 Rainer Klute <klute@irb.informatik.uni-dortmund.de>
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation. The author makes no representations about the suitability
* of this software for any purpose. It is provided "as is" without express
* or implied warranty.
*
*/
#include <malloc.h>
#include <string.h>
#include "xplz.h"
#include "convert.h"
#include "message.h"
#include "ortarda.h"
#include "pofada.h"
#include "strada.h"
#include "umsda.h"
#include "utils.h"
#if defined (HANDLE_BROKEN_DATAFILES)
#define IbmToIso IbmAndBrokenToIso
#endif
static char **msgTexts = (char **) 0;
char *ConversionStatusString (PlzConversionState pcs)
{
int i;
if (msgTexts == (char **) 0)
{
msgTexts = (char **) calloc (PlzLetzterZustand, sizeof (char *));
if (msgTexts == (char **) 0)
{
OutOfMemory ("ConversionStatusString");
return "";
}
for (i = 0; i < PlzLetzterZustand; i++)
msgTexts[i] = "";
msgTexts[PlzOrtNichtGefunden] = "Ort nicht gefunden.";
msgTexts[PlzOrtMehrdeutig] = "Bitte alte Postleitzahl eingeben!";
msgTexts[PlzPlzAltGeaendert] = "Bitte überprüfen!";
msgTexts[PlzPostanstaltBenoetigt] = "Bitte Zustellbezirk, Straße oder Postfach eingeben!";
msgTexts[PlzStrassePostfachBenoetigt] = "Bitte Straße oder Postfach eingeben!";
msgTexts[PlzStrasseNichtGefunden] = "Straße nicht gefunden.";
msgTexts[PlzStrasseMehrfachInOrt] = "Bitte Zustellbezirk oder Ortsteil eingeben!";
msgTexts[PlzStrasseMehrfachInPostanstalt] = "Bitte Ortsteil eingeben!";
msgTexts[PlzStrasseMehrfachInOrtsteil] = "Bitte Zustellbezirk eingeben!";
msgTexts[PlzHausnummerBenoetigt] = "Bitte Hausnummer eingeben!";
msgTexts[PlzHausnummerNichtGefunden] = "Hausnummer nicht gefunden.";
msgTexts[PlzPostfachNichtGefunden] = "Postfach nicht gefunden.";
msgTexts[PlzPostfachMehrfachInOrt] = "Bitte Postanstalt oder alte Postleitzahl eingeben!";
msgTexts[PlzPostfachMehrfachInPostanstalt] = "Bitte alte Postleitzahl eingeben!";
msgTexts[PlzPostfachMehrfachInPlz] = "Bitte Postanstalt eingeben!";
msgTexts[PlzKeinZustellPostamt] = "Dies ist ein reines Ausgabepostamt. Bitte Postfach oder andere Postanstalt eingeben!";
msgTexts[PlzKeinAusgabePostamt] = "Dies ist ein reines Zustellpostamt. Bitte Straße oder andere Postanstalt eingeben!";
}
return msgTexts[pcs];
}
/*
* FreePofadaSet
*/
static void FreePofadaSet (PofadaSet **p)
{
if (*p != (PofadaSet *) 0)
{
if ((*p)->list != (Pofada *) 0)
free ((*p)->list);
free (*p);
*p = (PofadaSet *) 0;
}
}
/*
* FreeStradaSet
*/
static void FreeStradaSet (StradaSet **s)
{
if (*s != (StradaSet *) 0)
{
if ((*s)->list != (Strada *) 0)
free ((*s)->list);
free (*s);
*s = (StradaSet *) 0;
}
}
/*
* FreeUmsdaSet
*/
static void FreeUmsdaSet (UmsdaSet **u)
{
if (*u != (UmsdaSet *) 0)
{
if ((*u)->list != (Umsda *) 0)
free ((*u)->list);
free (*u);
*u = (UmsdaSet *) 0;
}
}
/*
* FreeOrtardaSet
*/
static void FreeOrtardaSet (OrtardaSet **u)
{
if (*u != (OrtardaSet *) 0)
{
if ((*u)->list != (Ortarda *) 0)
free ((*u)->list);
free (*u);
*u = (OrtardaSet *) 0;
}
}
static Boolean UpdateIsoStringFromFixed (char **old, char *new, int length)
{
char *s = malloc (length + 1);
char *iso;
Boolean r;
if (s == (char *) 0)
{
OutOfMemory ("UpdateIsoStringFromFixed");
return False;
}
strncpy (s, new, length);
s[length] = '\0';
StripBlanks (s);
iso = IbmToIso (s);
if (iso == (char *) 0)
{
free (s);
return False;
}
r = UpdateString (old, iso);
free (iso);
free (s);
return r;
}
/*
* UpdateState
*/
static void UpdateState (PlzConversionState *pcs, PlzConversionState newState)
{
if (*pcs > newState)
*pcs = newState;
}
/*
* UpdatePlzAlt
*/
static Boolean UpdatePlzAlt (char **old, char *new, char verkehrsgebiet)
{
char msg[300];
Boolean changed = False;
char oldPlz[6];
char newPlz[6];
strcpy (oldPlz, OldPlz (*old, verkehrsgebiet));
strcpy (newPlz, OldPlz (new, verkehrsgebiet));
if (**old && strcmp (oldPlz, newPlz) != 0)
{
strcpy (msg, "Alte Postleitzahl ");
strcat (msg, oldPlz);
strcat (msg, " geändert in ");
strcat (msg, newPlz);
strcat (msg, ". ");
Message (msg);
changed = True;
}
UpdateIsoStringFromFixed (old, newPlz, 5);
return changed;
}
/*
* OrtEindeutig
*/
static Boolean OrtEindeutig (UmsdaSet *orte, OrtardaSet *archivOrte)
{
char orteAlort[sizeof (((Umsda *) 0)->alort) + 1];
char archivOrteAlort[sizeof (((Ortarda *) 0)->alort) + 1];
strcpy (orteAlort, UmsdaSetOrtEindeutig (orte));
if (archivOrte != (OrtardaSet *) 0)
strcpy (archivOrteAlort, OrtardaSetOrtEindeutig (archivOrte));
if (!*orteAlort && orte->entries >= 1)
return False;
if (archivOrte != (OrtardaSet *) 0
&& (!*archivOrteAlort && archivOrte->entries >= 1))
return False;
if (*orteAlort && archivOrte != (OrtardaSet *) 0 && *archivOrteAlort
&& strcmp (orteAlort, archivOrteAlort) != 0)
return False;
else
return True;
}
/*
* ConvertPlz
*/
void ConvertPlz (PlzConversion *pc, char *strasse, char *hausnummer,
char *postfach, char *plzalt, char *ort, char *postanstalt,
char *ortsteil)
{
PlzConversionState previousState;
char plz_neu[6];
Boolean changed = False;
NoteClear ();
/*
* Prüfen, ob irgendein Parameter vom vorigen Wert abweicht. In diesem Fall
* muß der Zustand entsprechend geändert werden.
*/
if (UpdateString (&pc->hausnummer, hausnummer))
{
if (pc->strassen != (StradaSet *) 0)
UpdateState (&pc->status, PlzHausnummerBenoetigt);
else
UpdateState (&pc->status, PlzPlzNeuGefunden);
}
if (UpdateString (&pc->strasse, strasse))
UpdateState (&pc->status, PlzSucheStrasse);
if (UpdateString (&pc->postfach, postfach))
UpdateState (&pc->status, PlzSuchePostfach);
if (pc->status == PlzSucheStrasse && *pc->postfach)
pc->status = PlzSuchePostfach;
if (pc->status == PlzSuchePostfach && *pc->strasse)
pc->status = PlzSucheStrasse;
if (UpdateString (&pc->postanstalt, postanstalt))
UpdateState (&pc->status, PlzSucheOrt);
if (UpdateString (&pc->ortsteil, ortsteil))
UpdateState (&pc->status, PlzSucheOrt);
if (UpdateString (&pc->plz_alt, plzalt))
UpdateState (&pc->status, PlzSucheOrt);
if (UpdateString (&pc->ort, ort))
UpdateState (&pc->status, PlzSucheOrt);
if (pc->status == PlzFehler || pc->status == PlzPlzAltGeaendert)
pc->status = PlzSucheOrt;
do
{
previousState = pc->status;
switch (pc->status)
{
case PlzSucheOrt:
{
if (!*pc->ort)
{pc->status = PlzOrtNichtGefunden; break;}
FreeUmsdaSet (&pc->orte);
pc->orte = UmsdaSucheOrt (pc->ort);
if (pc->orte == (UmsdaSet *) 0)
{pc->status = PlzFehler; break;}
if (pc->orte->entries <= 0 || !*(pc->plz_alt))
{pc->status = PlzSucheArchivOrt; break;}
else if (pc->orte->entries > 0 && *(pc->plz_alt))
{
UmsdaSet *orteNeu =
UmsdaSetSuchePlzAlt (pc->orte, pc->plz_alt,
pc->verkehrsgebiet);
if (orteNeu && orteNeu->entries == 0)
{
pc->status = PlzSucheArchivOrt;
break;
}
}
pc->status = PlzOrtGefunden;
break;
}
case PlzSucheArchivOrt:
{
if (!*pc->ort)
{pc->status = PlzOrtNichtGefunden; break;}
FreeOrtardaSet (&pc->archivOrte);
pc->archivOrte = OrtardaSucheOrt (pc->ort);
if (pc->orte->entries <= 0 && pc->archivOrte
&& pc->archivOrte->entries <= 0)
{pc->status = PlzOrtNichtGefunden; break;}
pc->status = PlzOrtGefunden;
break;
}
case PlzOrtGefunden:
{
if (pc->orte->entries >= 1
|| (pc->archivOrte && pc->archivOrte->entries >= 1))
{
if (OrtEindeutig (pc->orte, pc->archivOrte))
{
pc->status = PlzOrtEindeutig;
if (pc->orte->entries > 0)
UpdateIsoStringFromFixed (&pc->ort,
pc->orte->list[0].ortname_a,
sizeof (((Umsda *) 0)->ortname_a));
else
{
UpdateIsoStringFromFixed (&pc->ort,
pc->archivOrte->list[0].ortname_n,
sizeof (((Ortarda *) 0)->ortname_n));
UpdateIsoStringFromFixed (&pc->ortsteil,
pc->archivOrte->list[0].ortname_a,
sizeof (((Ortarda *) 0)->ortname_a));
}
}
else
pc->status = PlzOrtMehrdeutig;
}
else
pc->status = PlzOrtNichtGefunden;
break;
}
case PlzOrtMehrdeutig:
{
UmsdaSet *orteNeu;
OrtardaSet *archivOrteNeu;
/* Grund für Mehrdeutigkeiten können die Sortierfehler in den
* Dateien "umsda" oder "ortarda" sein. Daher müssen die
* Ortsnamen erneut überprüft werden, diesmal in voller Länge.
* Diese Überprüfung entfällt, wenn der Ortsname als Wildcard
* angegeben wurde.
*/
if (!ispunct (pc->ort[strlen (pc->ort) - 1]))
{
orteNeu = UmsdaSetSucheOrt (pc->orte, pc->ort);
archivOrteNeu = OrtardaSetSucheOrt (pc->archivOrte,
pc->ort);
if (orteNeu == (UmsdaSet *) 0
|| archivOrteNeu == (OrtardaSet *) 0)
{
pc->status = PlzFehler;
break;
}
if (orteNeu->entries + archivOrteNeu->entries > 0)
{
FreeUmsdaSet (&pc->orte);
FreeOrtardaSet (&pc->archivOrte);
pc->orte = orteNeu;
pc->archivOrte = archivOrteNeu;
}
}
if (!OrtEindeutig (pc->orte, pc->archivOrte) && *pc->plz_alt)
{
orteNeu = UmsdaSetSuchePlzAlt (pc->orte, pc->plz_alt,
pc->verkehrsgebiet);
archivOrteNeu =
OrtardaSetSuchePlzAlt (pc->archivOrte, pc->plz_alt,
pc->verkehrsgebiet);
if (orteNeu == (UmsdaSet *) 0
|| archivOrteNeu == (OrtardaSet *) 0)
{
pc->status = PlzFehler;
break;
}
if (orteNeu->entries + archivOrteNeu->entries > 0)
{
FreeUmsdaSet (&pc->orte);
FreeOrtardaSet (&pc->archivOrte);
pc->orte = orteNeu;
pc->archivOrte = archivOrteNeu;
}
}
if (OrtEindeutig (pc->orte, pc->archivOrte))
pc->status = PlzOrtGefunden;
break;
}
case PlzOrtEindeutig:
{
if (pc->orte->entries > 0)
{
if (strcmp (UmsdaSetPlzAltEindeutig (pc->orte), "") != 0)
changed =
UpdatePlzAlt (&pc->plz_alt, pc->orte->list[0].plz_w_o,
pc->verkehrsgebiet);
if (pc->orte->list[0].nplzo_z[0] == '1'
&& pc->orte->list[0].nplzo_p[0] == '1'
&& strncmp (pc->orte->list[0].plz_z,
pc->orte->list[0].plz_p, sizeof (pc->orte->list[0].plz_z))
== 0)
{
strncpy (plz_neu, pc->orte->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
else
pc->status = PlzPostanstaltBenoetigt;
}
if (pc->archivOrte && pc->archivOrte->entries > 0)
{
if (strcmp (OrtardaSetPlzAltEindeutig (pc->archivOrte), "")
!= 0)
changed =
UpdatePlzAlt (&pc->plz_alt,
pc->archivOrte->list[0].plz_w_o,
pc->verkehrsgebiet);
if (pc->archivOrte->entries == 1
&& pc->archivOrte->list[0].nplz_z[0] == '1'
&& pc->archivOrte->list[0].nplz_p[0] == '1'
&& strncmp (pc->archivOrte->list[0].plz_z,
pc->archivOrte->list[0].plz_p,
sizeof (pc->archivOrte->list[0].plz_z)) == 0)
{
strncpy (plz_neu, pc->archivOrte->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
else
pc->status = PlzPostanstaltBenoetigt;
}
if (changed)
{
plz_neu[5] = '\0';
pc->status = PlzPlzAltGeaendert;
}
break;
}
case PlzPostanstaltBenoetigt:
{
if (*(pc->postanstalt))
{
UmsdaSet *orteNeu;
OrtardaSet *archivOrteNeu;
orteNeu =
UmsdaSetSuchePostanstalt (pc->orte, pc->postanstalt);
if (orteNeu != (UmsdaSet *) 0 && orteNeu->entries == 1)
{
FreeUmsdaSet (&pc->orte);
pc->orte = orteNeu;
if (pc->orte->list[0].nplz_z[0] == '1'
&& pc->orte->list[0].nplz_p[0] == '1'
&& strncmp (pc->orte->list[0].plz_z,
pc->orte->list[0].plz_p,
sizeof (pc->orte->list[0].plz_z)) == 0)
{
strncpy (plz_neu, pc->orte->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
else
pc->status = PlzStrassePostfachBenoetigt;
}
else
pc->status = PlzStrassePostfachBenoetigt;
archivOrteNeu =
OrtardaSetSuchePostanstalt (pc->archivOrte,
pc->postanstalt);
if (archivOrteNeu != (OrtardaSet *) 0
&& archivOrteNeu->entries == 1)
{
FreeOrtardaSet (&pc->archivOrte);
pc->archivOrte = archivOrteNeu;
if (pc->archivOrte->list[0].nplz_z[0] == '1'
&& pc->archivOrte->list[0].nplz_p[0] == '1'
&& strncmp (pc->archivOrte->list[0].plz_z,
pc->archivOrte->list[0].plz_p,
sizeof (pc->archivOrte->list[0].plz_z)) == 0)
{
strncpy (plz_neu, pc->archivOrte->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
else
pc->status = PlzStrassePostfachBenoetigt;
}
else
pc->status = PlzStrassePostfachBenoetigt;
}
else
pc->status = PlzStrassePostfachBenoetigt;
break;
}
case PlzStrassePostfachBenoetigt:
{
if (*(pc->strasse) && *(pc->postfach))
pc->status = PlzUnzulaessigerZustand;
else if (*(pc->strasse))
pc->status = PlzSucheStrasse;
else if (*(pc->postfach))
pc->status = PlzSuchePostfach;
break;
}
case PlzSucheStrasse:
{
FreeStradaSet (&pc->strassen);
if (pc->orte->entries > 0)
{
if (*(pc->orte->list[0].nplzo_z) == '0')
{
pc->status = PlzKeinZustellPostamt;
break;
}
if (*(pc->orte->list[0].nplzo_z) == '1')
{
if (*(pc->orte->list[0].nplz_z) == '0')
{
pc->status = PlzKeinZustellPostamt;
break;
};
strncpy (plz_neu, pc->orte->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
break;
}
else if (*(pc->orte->list[0].nplzo_z) == '2')
pc->strassen = SucheStrasse (pc->orte->list[0].alort,
pc->strasse);
}
else if (pc->archivOrte->entries > 0)
{
if (*(pc->archivOrte->list[0].nplz_z) == '1')
{
strncpy (plz_neu, pc->archivOrte->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
break;
}
pc->strassen = SucheStrasse (pc->archivOrte->list[0].alort,
pc->strasse);
}
if (pc->strassen == (StradaSet *) 0)
{pc->status = PlzFehler; break; }
if (pc->strassen->entries == 0)
{pc->status = PlzStrasseNichtGefunden; break;}
pc->status = PlzStrasseGefunden;
break;
}
case PlzStrasseGefunden:
{
UpdateIsoStringFromFixed (&pc->strasse,
pc->strassen->list[0].sname,
sizeof (((Strada *) 0)->sname));
if (pc->strassen->entries >= 1)
{
if (UniqueStreet (pc->strassen))
pc->status = PlzStrasseEindeutig;
else
pc->status = PlzStrasseMehrfachInOrt;
}
else
pc->status = PlzStrasseNichtGefunden;
break;
}
case PlzStrasseEindeutig:
{
UpdateIsoStringFromFixed (&pc->plz_alt,
pc->strassen->list[0].plz_w_o,
sizeof (((Strada *) 0)->plz_w_o) +
sizeof (((Strada *) 0)->plzalt));
if (IsStrassePlzEindeutig (pc->strassen))
{
UpdateIsoStringFromFixed (&pc->postanstalt,
pc->strassen->list[0].npanst,
sizeof (((Strada *) 0)->npanst));
UpdateIsoStringFromFixed (&pc->ortsteil,
pc->strassen->list[0].ortsteil,
sizeof (((Strada *)
0)->ortsteil));
strncpy (plz_neu, pc->strassen->list[0].plz_z, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
else
pc->status = PlzHausnummerBenoetigt;
break;
}
case PlzStrasseMehrfachInOrt:
{
StradaSet *new;
if (*pc->postanstalt)
{
new = StrassenAndPostanstalt (pc->strassen,
pc->postanstalt);
if (new != (StradaSet *) 0)
{
if (new->entries > 0)
{
FreeStradaSet (&pc->strassen);
pc->strassen = new;
if (UniqueStreet (pc->strassen))
pc->status = PlzStrasseEindeutig;
else
pc->status = PlzStrasseMehrfachInPostanstalt;
}
else
{
FreeStradaSet (&new);
UpdateString (&pc->postanstalt, "");
pc->status = PlzStrasseGefunden;
}
}
else
pc->status = PlzFehler;
}
if (*pc->ortsteil)
{
new = StrassenAndOrtsteil (pc->strassen, pc->ortsteil);
if (new != (StradaSet *) 0)
{
if (new->entries > 0)
{
FreeStradaSet (&pc->strassen);
pc->strassen = new;
if (UniqueStreet (pc->strassen))
pc->status = PlzStrasseEindeutig;
else
pc->status = PlzStrasseMehrfachInOrtsteil;
}
else
{
FreeStradaSet (&new);
UpdateString (&pc->ortsteil, "");
pc->status = PlzStrasseGefunden;
}
}
else
pc->status = PlzFehler;
}
break;
}
case PlzHausnummerBenoetigt:
{
if (*pc->hausnummer)
{
if (!UniqueStreet (pc->strassen))
{
pc->status = PlzSucheStrasse;
break;
}
strcpy (plz_neu,
SearchForHouseNumber (pc->strassen,
pc->hausnummer));
if (!*(plz_neu))
pc->status = PlzHausnummerNichtGefunden;
else
{
UpdateIsoStringFromFixed (&pc->postanstalt,
pc->strassen->list[0].npanst,
sizeof (((Strada *) 0)->npanst));
UpdateIsoStringFromFixed (&pc->ortsteil,
pc->strassen->list[0].ortsteil,
sizeof (((Strada *) 0)->ortsteil));
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
}
break;
}
case PlzSuchePostfach:
{
FreePofadaSet (&pc->postfaecher);
if (pc->orte->entries > 0)
{
if (*(pc->orte->list[0].nplzo_p) == '0')
{
pc->status = PlzKeinAusgabePostamt;
break;
}
else if (*(pc->orte->list[0].nplzo_p) == '1')
{
if (*(pc->orte->list[0].nplz_p) == '0')
{
pc->status = PlzKeinAusgabePostamt;
break;
};
strncpy (plz_neu, pc->orte->list[0].plz_p, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
break;
}
else if (*(pc->orte->list[0].nplzo_p) == '2')
pc->postfaecher =
SuchePostfach (pc->orte->list[0].alort, pc->postfach);
}
else if (pc->archivOrte->entries > 0)
{
if (*(pc->archivOrte->list[0].nplz_p) == '1')
{
strncpy (plz_neu, pc->archivOrte->list[0].plz_p, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
break;
}
pc->postfaecher =
SuchePostfach (pc->archivOrte->list[0].alort, pc->postfach);
}
if (pc->postfaecher == (PofadaSet *) 0)
{pc->status = PlzFehler; break;}
if (pc->postfaecher->entries == 0)
{pc->status = PlzPostfachNichtGefunden; break;}
pc->status = PlzPostfachGefunden;
break;
}
case PlzPostfachGefunden:
{
if (pc->postfaecher->entries == 1)
{
UpdateIsoStringFromFixed (&pc->plz_alt,
pc->postfaecher->list[0].plz_w_o,
sizeof (((Pofada *) 0)->plz_w_o) +
sizeof (((Pofada *) 0)->plzalt));
UpdateIsoStringFromFixed (&pc->postanstalt,
pc->postfaecher->list[0].npanst,
sizeof (((Pofada *) 0)->npanst));
UpdateString (&pc->ortsteil, "");
strncpy (plz_neu, pc->postfaecher->list[0].plzneu_p, 5);
plz_neu[5] = '\0';
UpdateString (&pc->plz_neu, plz_neu);
pc->status = PlzPlzNeuGefunden;
}
else
pc->status = PlzPostfachMehrfachInOrt;
break;
}
case PlzPostfachMehrfachInOrt:
{
PofadaSet *new;
if (*pc->postanstalt)
{
new = PostfaecherAndPostanstalt (pc->postfaecher,
pc->postanstalt);
if (new != (PofadaSet *) 0)
{
FreePofadaSet (&pc->postfaecher);
pc->postfaecher = new;
if (UniquePostbox (pc->postfaecher))
pc->status = PlzPostfachGefunden;
else
pc->status = PlzPostfachMehrfachInPostanstalt;
}
else
pc->status = PlzFehler;
}
if (*pc->plz_alt)
{
new = PostfaecherAndPlz (pc->postfaecher, pc->plz_alt);
if (new != (PofadaSet *) 0)
{
if (new->entries > 0)
{
FreePofadaSet (&pc->postfaecher);
pc->postfaecher = new;
}
if (UniquePostbox (pc->postfaecher))
pc->status = PlzPostfachGefunden;
else
pc->status = PlzPostfachMehrfachInPlz;
}
else
pc->status = PlzFehler;
}
break;
}
case PlzOrtNichtGefunden:
case PlzPlzAltGeaendert:
case PlzStrasseNichtGefunden:
case PlzStrasseMehrfachInPostanstalt:
case PlzStrasseMehrfachInOrtsteil:
case PlzHausnummerNichtGefunden:
case PlzPostfachNichtGefunden:
case PlzPostfachMehrfachInPostanstalt:
case PlzPostfachMehrfachInPlz:
case PlzKeinZustellPostamt:
case PlzKeinAusgabePostamt:
case PlzPlzNeuGefunden:
case PlzFehler:
break;
default:
{
pc->status = PlzUnzulaessigerZustand;
Message ("Interner Fehler. Bitte senden Sie die Adresse\n");
Message ("per E-Mail an klute@informatik.uni-dortmund.de!\n");
break;
}
}
}
while (previousState != pc->status);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.