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.