ftp.nice.ch/pub/next/database/plz/xplz.3.4.s.tar.gz#/xplz-3.4/gui_batch.c

This is gui_batch.c in view mode; [Download] [Up]

/* $Id: gui_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 <stdio.h>

#include <Xm/Xm.h>
#include <Xm/Text.h>

#include "gui.h"
#include "ui.h"
#include "gui_batch.h"
#include "gui_build.h"
#include "gui_utils.h"
#include "message.h"


static void BatchCleanUp (Batch *batch);
static Boolean BatchWorkProc (Batch *batch);
static void DisplayAfter (Batch *batch);
static void DisplayBefore (Batch *batch, char *strasse, char *hausnummer,
			   char *postfach, char *plz_alt, char *ort,
			   char *postanstalt, char *ortsteil);
static void PlzFound (Batch *batch);
static void PlzNotFound (Batch *batch);




XtCallbackProc BatchAbort (Widget widget, XtPointer clientData,
			   XtPointer callData)
{
    ConversionData *cd = (ConversionData *) clientData;
    GuiComponents *gc = cd->gc;

    XtVaSetValues (gc->menuBatchStart, XmNsensitive, (XtArgVal) True, NULL);
    XtVaSetValues (gc->menuBatchContinue, XmNsensitive, (XtArgVal) False, NULL);
    XtVaSetValues (gc->menuBatchAbort, XmNsensitive, (XtArgVal) False, NULL);
    cd->batch->status = BatchFinished;
}




XtCallbackProc BatchCancel (Widget widget, XtPointer clientData,
			    XtPointer callData)
{
    XtPopdown (TopLevelShell (widget));
}




XtCallbackProc BatchContinue (Widget widget, XtPointer clientData,
			      XtPointer callData)
{
    ConversionData *cd = (ConversionData *) clientData;
    GuiComponents *gc = cd->gc;
    Batch *batch = cd->batch;

    SetBusyCursor (gc->plz_neu);
    if (batch->pc->status == PlzPlzNeuGefunden)
	PlzFound (batch);
    else
	FputsCharSet (batch->inputRecord, batch->efl, batch->outputFormat);
    batch->status = BatchRunning;
    XtVaSetValues (gc->menuBatchStart, XmNsensitive, (XtArgVal) False, NULL);
    XtVaSetValues (gc->menuBatchContinue, XmNsensitive, (XtArgVal) False, NULL);
    XtVaSetValues (gc->menuBatchAbort, XmNsensitive, (XtArgVal) True, NULL);
    XtAppAddWorkProc (XtWidgetToApplicationContext (widget),
		      (XtWorkProc) BatchWorkProc, (XtPointer) batch);
}




XtCallbackProc BatchOk (Widget widget, XtPointer clientData, XtPointer callData)
{
    ConversionData *cd = (ConversionData *) clientData;
    GuiComponents *gc = cd->gc;
    Batch *batch = cd->batch;
    char *help;

    batch->inputFile = XmTextGetString (gc->inputFile);
    batch->outputFile = XmTextGetString (gc->outputFile);
    batch->errorFile = XmTextGetString (gc->errorFile);
    help = XmTextGetString (gc->separator);
    batch->separator = *help;
    free (help);
    help = XmTextGetString (gc->columnStreet);
    batch->columnStreet = atoi (help);
    free (help);
    help = XmTextGetString (gc->columnPlz);
    batch->columnPlz = atoi (help);
    free (help);
    help = XmTextGetString (gc->columnPlace);
    batch->columnPlace = atoi (help);
    free (help);
    batch->ifl = (FILE *) 0;
    batch->ofl = (FILE *) 0;
    batch->efl = (FILE *) 0;
    batch->status = BatchInit;
    batch->inputRecord = (char *) 0;
    batch->successCallback = PlzFound;
    batch->failureCallback = PlzNotFound;
    batch->beforeConvertCallback = DisplayBefore;
    batch->afterConvertCallback = DisplayAfter;
    batch->finishedCallback = BatchCleanUp;

    SetBusyCursor (gc->plz_neu);
    XtVaSetValues (gc->menuBatchStart, XmNsensitive, (XtArgVal) False, NULL);
    XtVaSetValues (gc->menuBatchContinue, XmNsensitive, (XtArgVal) False, NULL);
    XtVaSetValues (gc->menuBatchAbort, XmNsensitive, (XtArgVal) True, NULL);
    XtPopdown (TopLevelShell (widget));
    XtAppAddWorkProc (XtWidgetToApplicationContext (widget),
		      (XtWorkProc) BatchWorkProc, (XtPointer) batch);
}




XtCallbackProc BatchStart (Widget widget, XtPointer clientData,
			   XtPointer callData)
{
    ConversionData *cd = (ConversionData *) clientData;
    static Widget dialog = (Widget) 0;

    if (cd->batch == (Batch *) 0)
    {
	cd->batch = (Batch *) calloc (1, sizeof (Batch));
	if (cd->batch == (Batch *) 0)
	{
	    OutOfMemory ("BatchDefine");
	    return;
	}
	UpdateString (&(cd->batch->inputFile), "");
	UpdateString (&(cd->batch->outputFile), "");
	UpdateString (&(cd->batch->errorFile), "");
	cd->batch->separator = '\0';
        cd->batch->columnStreet = -1;
        cd->batch->columnPlz = -1;
        cd->batch->columnPlace = -1;
	cd->batch->outputFormat = OutputISO;
	cd->batch->ifl = (FILE *) 0;
	cd->batch->ofl = (FILE *) 0;
	cd->batch->efl = (FILE *) 0;
	cd->batch->pc = cd->pc;
	cd->batch->fehlerAnhalten = True;
	cd->batch->userData = cd;
    }

    if (dialog == (Widget) 0)
	dialog = CreateBatchDialog (widget, cd);
    XtPopup (dialog, XtGrabNone);
}




XtCallbackProc SetAusgabeFormatIso (Widget widget, XtPointer clientData,
				    XtPointer callData)
{
    ((ConversionData *) clientData)->batch->outputFormat = OutputISO;
}




XtCallbackProc SetAusgabeFormatIbm (Widget widget, XtPointer clientData,
				    XtPointer callData)
{
    ((ConversionData *) clientData)->batch->outputFormat = OutputIBM;
}




XtCallbackProc SetAusgabeFormatAtari (Widget widget, XtPointer clientData,
				      XtPointer callData)
{
    ((ConversionData *) clientData)->batch->outputFormat = OutputAtari;
}




XtCallbackProc SetFehlerAnhalten (Widget widget, XtPointer clientData,
				  XtPointer callData)
{
    ((ConversionData *) clientData)->batch->fehlerAnhalten = True;
}




XtCallbackProc SetFehlerWeiter (Widget widget, XtPointer clientData,
				XtPointer callData)
{
    ((ConversionData *) clientData)->batch->fehlerAnhalten = False;
}




XtCallbackProc SetVerkehrsgebietWest (Widget widget, XtPointer clientData,
				      XtPointer callData)
{
    ((ConversionData *) clientData)->pc->verkehrsgebiet = 'W';
}




XtCallbackProc SetVerkehrsgebietOst (Widget widget, XtPointer clientData,
				     XtPointer callData)
{
    ((ConversionData *) clientData)->pc->verkehrsgebiet = 'O';
}




/****** Static functions ******/




static void BatchCleanUp (Batch *batch)
{
    GuiComponents *gc = ((ConversionData *) batch->userData)->gc;

    UnsetBusyCursor (gc->plz_neu);
    XtVaSetValues (gc->menuBatchStart, XmNsensitive, (XtArgVal) True, NULL);
    XtVaSetValues (gc->menuBatchContinue, XmNsensitive, (XtArgVal) False, NULL);
    XtVaSetValues (gc->menuBatchAbort, XmNsensitive, (XtArgVal) False, NULL);
}




static Boolean BatchWorkProc (Batch *batch)
{
    Boolean r;

    r = BatchConvert (batch);
    return r;
}




static void DisplayBefore (Batch *batch, char *strasse, char *hausnummer,
			  char *postfach, char *plz_alt, char *ort,
			  char *postanstalt, char *ortsteil)
{
    GuiComponents *gc = ((ConversionData *) batch->userData)->gc;
    char string[300];

    LabelSetString (gc->plz_neu, "");
    strcpy (string, StrasseString (strasse, hausnummer, postfach));
    XmTextSetString (gc->strasse, string);
    strcpy (string, OrtString (plz_alt, ort, postanstalt, ortsteil));
    XmTextSetString (gc->ort, string);
    XmUpdateDisplay (gc->ort);
}




static void DisplayAfter (Batch *batch)
{
    GuiComponents *gc = ((ConversionData *) batch->userData)->gc;
    PlzConversion *pc = ((ConversionData *) batch->userData)->pc;
    char string[300];

    if (pc->status == PlzPlzNeuGefunden)
	LabelSetString (gc->plz_neu, pc->plz_neu);
    else
	LabelSetString (gc->plz_neu, "");
    strcpy (string, StrasseString (pc->strasse, pc->hausnummer, pc->postfach));
    XmTextSetString (gc->strasse, string);
    strcpy (string, OrtString (pc->plz_alt, pc->ort, pc->postanstalt,
	    pc->ortsteil));
    XmTextSetString (gc->ort, string);
    XmUpdateDisplay (gc->ort);
}




static void PlzFound (Batch *batch)
{
    PlzConversion *pc = batch->pc;
    char *help1, *help2;
    char ortString[300];

    help1 = ColumnReplace (batch->inputRecord, batch->columnStreet,
			   batch->separator,
			   StrasseString (pc->strasse, pc->hausnummer,
					  pc->postfach));
    if (batch->columnPlz > 0 && batch->columnPlz != batch->columnPlace)
    {
	help2 = ColumnReplace (help1, batch->columnPlz, batch->separator,
			       pc->plz_neu);
	free (help1);
	help1 = help2;
	help2 = ColumnReplace (help1, batch->columnPlace, batch->separator,
			       pc->ort);
    }
    else
    {
	sprintf (ortString, "%s %s", pc->plz_neu, pc->ort);
	help2 = ColumnReplace (help1, batch->columnPlace, batch->separator,
			       ortString);
    }
    FputsCharSet (help2, batch->ofl, batch->outputFormat);
    free (help1);
    free (help2);
}




static void PlzNotFound (Batch *batch)
{
    ConversionData *cd = (ConversionData *) batch->userData;
    GuiComponents *gc = cd->gc;
    int status = cd->pc->status;

    if (batch->fehlerAnhalten)
    {
	batch->status = BatchInterrupted;
	XtVaSetValues (gc->menuBatchStart, XmNsensitive, (XtArgVal) False,
		       NULL);
	XtVaSetValues (gc->menuBatchContinue, XmNsensitive, (XtArgVal) True,
		       NULL);
	XtVaSetValues (gc->menuBatchAbort, XmNsensitive, (XtArgVal) True, NULL);
	if (cd->pc->status != PlzPlzAltGeaendert)
	    ConvertCallback (gc->strasse, cd, NULL);
	else
	{
	    MessageFlush ();
	    UnsetBusyCursor (gc->ort);
	}
    }
    else
	FputsCharSet (batch->inputRecord, batch->efl, batch->outputFormat);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.