This is parse.c in view mode; [Download] [Up]
/* $Id: parse.c,v 2.7 1993/06/04 14:46:52 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 <ctype.h> #ifdef __NeXT__ #include <stdlib.h> #else #include <malloc.h> #endif #include <string.h> #include "parse.h" #include "utils.h" void ParseStrasse (char *string, char **strasse, char **hausnummer, char **postfach) { char word[100]; char *s = string; char *r; *strasse = (char *) malloc (100); *hausnummer = (char *) malloc (100); *postfach = (char *) malloc (100); (*strasse)[0] = (*hausnummer)[0] = (*postfach)[0] = word[0] = '\0'; *word = '\0'; s = string; while (*s) { int last; for (; *s && isspace ((unsigned char) *s); s++) ; for (r = s; *r && !isspace ((unsigned char) *r) ; r++) ; last = strlen (word); strncat (word, s, (int) (r - s)); last += r - s; word[last] = '\0'; for (s = r; *s && isspace ((unsigned char) *s); s++) ; /* Falls das aktuelle Wort nicht zu einer Haus- oder Postfachnummer gehört, hängen wir es an den Straßennamen an. */ if (!(isdigit (word[0])) && word[last - 1] != '-') { if (**strasse) strcat (*strasse, " "); strcat (*strasse, word); *word = '\0'; } } if (isdigit (*word)) strcpy (*hausnummer, word); else { if (**strasse && *word) strcat (*strasse, " "); strcat (*strasse, word); } if (IbmIsoCStringCompare (*strasse, "Postfach") == 0) { strcpy (*postfach, *hausnummer); (*strasse)[0] = (*hausnummer)[0] = '\0'; } } void ParseOrt (char *string, char **plz_alt, char **ort, char **postanstalt, char **ortsteil) { char *s = string; char *r; *plz_alt = (char *) malloc (100); *ort = (char *) malloc (100); *postanstalt = (char *) malloc (100); *ortsteil = (char *) malloc (100); **plz_alt = **ort = **postanstalt = **ortsteil = '\0'; /* Postleitzahl: */ for (s = r = string; *s && isspace ((unsigned char) *s); s++) ; if (*s == 'W' || *s == 'O' || *s == 'w' || *s == 'o') { if (*(s+1) == '-' || isdigit (*(s+1))) for (r = s; !isspace (*r); r++) ; } else if (isdigit (*s)) for (r = s; *r != ' '; r++) ; if (r > s) { strncpy (*plz_alt, s, (int) (r - s)); (*plz_alt)[r - s] = '\0'; } /* Ort: */ for (s = r; *s && isspace ((unsigned char) *s); s++) ; /* Wortweise weiter bis Ziffer (Postanstalt) oder '(' (Ortsteil) */ r = s; while (*r && !isdigit (*r) && *r != '(') { while (*r && *r != ' ') r++; if (*r == ' ') r++; } if (*(r-1) == ' ') r--; strncpy (*ort, s, (int) (r - s)); (*ort)[r - s] = '\0'; /* Postanstalt: */ for (s = r; isspace (*s); s++) ; for (r = s; *r && isdigit (*r); r++) ; strncpy (*postanstalt, s, (int) (r - s)); (*postanstalt)[r - s] = '\0'; /* Ortsteil: */ for (s = r; isspace (*s); s++) ; if (*s == '(') { for (r = ++s; *r && *r != ')'; r++) ; strncpy (*ortsteil, s, (int) (r - s)); (*ortsteil)[r - s] = '\0'; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.