/* * $Id: scanmenu.c,v 1.1.1.1 1996/03/01 11:39:08 mclareni Exp $ * * $Log: scanmenu.c,v $ * Revision 1.1.1.1 1996/03/01 11:39:08 mclareni * Paw * */ /*CMZ : 2.07/00 18/04/95 17.36.41 by O.Couet*/ /*-- Author : Gregory Kozlovsky 09/04/95*/ /******************************************************************************* Callback functions for Scan menu and for Scan Subpanel. =====================> Author: G. Kozlovsky, 1994 <=========================== *******************************************************************************/ #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #include "hmotif/uxxt.h" #include "fpanelsh/errordb.h" #include "fpanelsh/fplocal.h" #define CONTEXT_MACRO_ACCESS 1 #include "fpanelsh/parlineform.h" #undef mainctxt #undef UxParent #include "fpanelsh/scanpanel.h" #undef UxParent #include "fpanelsh/mainpanel.h" #undef CONTEXT_MACRO_ACCESS #ifdef __cplusplus } /* extern "C" */ #endif /******************************************************************************* ####################### Scan panel callbacks ###################### *******************************************************************************/ /*********************************************************************** DESCRIPTION: Set context for the scan panel and the corresponding main panel. ARGUMENT: A pointer to the scan panel context. ***********************************************************************/ static void scanPanelSetContext(void *spct) { UxScanPanelShellContext = (_UxCscanPanelShell *) spct; UxMainPanelShellContext = (_UxCmainPanelShell *)mainctxt; } /*********************************************************************** Num text field callback. ***********************************************************************/ static void clb_numRead( Widget text, XtPointer client_data, XtPointer call_data) { int prevnum = scan_num; scanPanelSetContext(client_data); textReadInt(text, &scan_numStat, &scan_num, nonEmptyIntOK); textIntError((TextReadCode)currErrorCode, "parameter", 0, mainPanelShell); if (currErrorCode == TEXT_OK) { if (scan_num < 1 || npar < scan_num) { textSetSemantError(text, &scan_numStat); km_warn_user(scanPanelShell, "Parameter number is invalid",""); currErrorCode = TEXT_INVALID; } else { scan_xfrom = vscalemin[scan_num-1]; scan_xfromStat.stat = TEXTSTAT_READOK; textWriteFloat(scanFromText, &scan_xfromStat, scan_xfrom); scan_xto = vscalemax[scan_num-1]; scan_xtoStat.stat = TEXTSTAT_READOK; textWriteFloat(scanToText, &scan_xtoStat, scan_xto); textRemoveSemantError(text, &scan_numStat); } } } /*********************************************************************** Npt text field callback. ***********************************************************************/ static void clb_nptRead( Widget text, XtPointer client_data, XtPointer call_data) { scanPanelSetContext(client_data); textReadInt(text, &scan_nptStat, &scan_npt, positiveIntOK); textIntError((TextReadCode)currErrorCode, "number of points", 0, mainPanelShell); if (currErrorCode == TEXT_OK) { if (scan_xpt != NULL) free(scan_xpt); scan_xpt = (double *)malloc(2*scan_npt*sizeof(double)); scan_ypt = scan_xpt+scan_npt; } } /*********************************************************************** "From" text field callback. ***********************************************************************/ static void clb_xfromRead( Widget text, XtPointer client_data, XtPointer call_data) { scanPanelSetContext(client_data); textReadFloat(text, &scan_xfromStat, &scan_xfrom, nonEmptyFloatOK); textFloatError((TextReadCode)currErrorCode, "xfrom", 0, mainPanelShell); } /*********************************************************************** "To" text field callback. ***********************************************************************/ static void clb_xtoRead( Widget text, XtPointer client_data, XtPointer call_data) { scanPanelSetContext(client_data); textReadFloat(text, &scan_xtoStat, &scan_xto, nonEmptyFloatOK); textFloatError((TextReadCode)currErrorCode, "xto", 0, mainPanelShell); } /*********************************************************************** "Compute" button callback. ***********************************************************************/ static void clb_scanCompute( Widget button, XtPointer client_data, XtPointer call_data) { int pnum; float xcurr,xdel; int i; int iflag = 0; double pval, ydummy; scanPanelSetContext(client_data); if (scan_numStat.stat!=TEXTSTAT_READOK || scan_nptStat.stat!=TEXTSTAT_READOK || scan_xtoStat.stat!=TEXTSTAT_READOK || scan_xfromStat.stat!=TEXTSTAT_READOK) { return; } createBusyDialog(scanPanelShell, UxMainPanelShellContext); pnum = scan_num - 1; xdel = (scan_xto-scan_xfrom)/(scan_npt-1); xcurr = scan_xfrom; pval = vpar[pnum]; for (i=0; i