This is batch.c in view mode; [Download] [Up]
/* $Id: batch.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 <malloc.h>
#include <string.h>
#include "xplz.h"
#include "message.h"
#include "batch.h"
#include "convert.h"
#include "parse.h"
/*
* OpenFile
*/
static void OpenFile (FILE **f, char *filename, char *type, char *filetype,
FILE *fallback)
{
if (*f == (FILE *) 0)
{
*f = fopen (filename, type);
if (*f == (FILE *) 0)
*f = fallback;
}
}
/*
* BatchConvert: gibt "True" zurück, wenn fertig, bei Unterbrechungen "False".
*/
Boolean BatchConvert (Batch *batch)
{
char *help;
char *strassenFeld, *plzFeld, *ortsFeld;
char *strasse, *hausnummer, *postfach, *plz_alt, *ort, *postanstalt,
*ortsteil;
char record[5000];
Boolean done = False;
switch (batch->status)
{
case BatchInit:
{
OpenFile (&batch->ifl, batch->inputFile, "r", "Eingabedatei",
stdin);
OpenFile (&batch->ofl, batch->outputFile, "w", "Ausgabedatei",
stdout);
OpenFile (&batch->efl, batch->errorFile, "w", "Fehlerdatei",
stderr);
if (batch->ifl == (FILE *) 0 || batch->ofl == (FILE *) 0
|| batch->efl == (FILE *) 0)
batch->status = BatchError;
else
batch->status = BatchRunning;
break;
}
case BatchRunning:
{
*record = '\0';
fgets (record, sizeof (record), batch->ifl);
if (!*record)
{
batch->status = BatchFinished;
break;
}
if (batch->inputRecord != (char *) 0)
free (batch->inputRecord);
batch->inputRecord = IbmToIso (record);
strassenFeld =
ReadSeparatedField (batch->inputRecord, batch->columnStreet,
batch->separator);
ortsFeld =
ReadSeparatedField (batch->inputRecord, batch->columnPlace,
batch->separator);
if (batch->columnPlz > 0 && batch->columnPlz != batch->columnPlace)
{
plzFeld =
ReadSeparatedField (batch->inputRecord, batch->columnPlz,
batch->separator);
help = (char *) malloc (strlen (plzFeld) + strlen (ortsFeld)
+ 2);
sprintf (help, "%s %s", plzFeld, ortsFeld);
free (plzFeld);
free (ortsFeld);
ortsFeld = help;
}
ParseStrasse (strassenFeld, &strasse, &hausnummer, &postfach);
ParseOrt (ortsFeld, &plz_alt, &ort, &postanstalt, &ortsteil);
if (batch->beforeConvertCallback != (void (*)()) 0)
batch->beforeConvertCallback (batch, strasse, hausnummer,
postfach, plz_alt, ort,
postanstalt, ortsteil);
ConvertPlz (batch->pc, strasse, hausnummer, postfach, plz_alt, ort,
postanstalt, ortsteil);
free (strasse);
free (hausnummer);
free (postfach);
free (plz_alt);
free (ort);
free (postanstalt);
free (ortsteil);
if (batch->afterConvertCallback != (void (*)()) 0)
batch->afterConvertCallback (batch);
if (batch->pc->status == PlzPlzNeuGefunden)
batch->successCallback (batch);
else
batch->failureCallback (batch);
free (strassenFeld);
free (ortsFeld);
if (feof (batch->ifl))
batch->status = BatchFinished;
break;
}
case BatchInterrupted:
{
done = True;
break;
}
case BatchFinished:
{
if (batch->ifl != stdin)
fclose (batch->ifl);
if (batch->ofl != stdout)
fclose (batch->ofl);
if (batch->efl != stderr)
fclose (batch->efl);
if (batch->finishedCallback != (void (*)()) 0)
batch->finishedCallback (batch);
done = True;
break;
}
default:
{
Message ("Interner Fehler in \"BatchConvert\".\n");
batch->status = BatchError;
done = True;
}
}
return done;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.