awips2/ncep/gov.noaa.nws.ncep.ui.nsharp/nsharp_c/mod_snd.c
root 9f19e3f712 Initial revision of AWIPS2 11.9.0-7p5
Former-commit-id: 64fa9254b946eae7e61bbc3f513b7c3696c4f54f
2012-01-06 08:55:05 -06:00

805 lines
24 KiB
C

#include "gui.h"
#include "sharp95.h"
/*
* private functions
*/
void _mapzoommdl ( void );
void model_list_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void model_select_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void mtime_select_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void mod_time_select_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void mapprojmdl_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void mapzoommdl_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void mapunzoommdl_cb (Widget wdgt, XtPointer clnt, XtPointer call);
void set_mdlsta (Widget wdgt, XtPointer clnt, XtPointer call);
extern char mtime_list[500][20], mdlsoundtime[20], mdlsoundsta[12],
mdl_selected[12];
extern char mdlsoundfile[200];
extern mapstruct mod_map;
extern Widget mdl_statext;
extern Widget mdl_cursor_text;
extern Widget mdl_map;
extern Widget toplevel;
static _NXMmenuItem *modmenu;
Widget mdl_list = NULL;
Widget mdlfile_timelist;
static char map_winname[]="grid_map";
void model_sounding_cb (Widget wid)
/************************************************************************
* SHOW_MODEL_INFO *
** *
* log: *
* R. Tian/SAIC 02/03 Added CPF ratio button *
* T. Piper/SAIC 01/04 Removed NAWIPS_TABLES *
* T. Piper/SAIC 01/04 NxmWarn_show *
***********************************************************************/
{
static Widget mdl_dialog = NULL, mdlpane, mdlform, mdlmenuform, mdlform2, mdlform3,
mdlfile_ok, mdlfile_cancel, mdlfile_help,
mdllbl_time, mdlstn_opt, mdltxtframe;
static Widget mdl_selW;
XmString one, two, thr, str, mdl_title;
int ii, nmap;
int ier;
Arg args[10];
Cardinal argcnt;
static Widget menubar, maparea_zoom, maparea_unzoom, button;
static Widget rowcol, radio_box;
static _NXMmenuItem mapmenu[30];
if (!mdl_dialog)
{
mdl_title = XmStringCreateLocalized ("Model Sounding Selection");
mdl_dialog = XmCreateBulletinBoardDialog (toplevel, "mdl_panel",
NULL, 0);
XtVaSetValues (mdl_dialog, XmNdialogTitle, mdl_title, NULL);
XmStringFree (mdl_title);
mdlpane = XtVaCreateManagedWidget ("parcel_pane",
xmPanedWindowWidgetClass,
mdl_dialog,
XmNsashWidth, 1,
XmNsashHeight, 1, NULL);
/*
* Create forms for areas of popup dialog
*/
/* Menu bar form */
mdlmenuform = XtVaCreateWidget ("form", xmFormWidgetClass, mdlpane, NULL);
/* data contols */
mdlform2 = XtVaCreateWidget ("form", xmFormWidgetClass, mdlpane,
XmNwidth, 800, XmNfractionBase, 7, NULL);
/* File and map selection form */
mdlform = XtVaCreateWidget ("form", xmFormWidgetClass,
mdlpane, XmNwidth, 800, XmNfractionBase, 7,
NULL);
/* lat/lon text box form */
mdlform3 = XtVaCreateWidget ("form", xmFormWidgetClass, mdlpane, NULL);
str = XmStringCreateLocalized ("Available Grid files:");
mdl_selW = XtVaCreateManagedWidget ("mdlfile_label",
xmLabelWidgetClass, mdlform2,
XmNlabelString, str,
XmNleftAttachment,
XmATTACH_POSITION, XmNleftPosition,
0, XmNtopAttachment, XmATTACH_FORM,
NULL);
XmStringFree (str);
mdl_list = XmCreateScrolledList (mdlform2, "mdl_times", NULL, 0);
XtVaSetValues (mdl_list, XmNvisibleItemCount, 3,
XmNselectionPolicy, XmEXTENDED_SELECT, NULL);
XtVaSetValues (XtParent (mdl_list),
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 0,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, mdl_selW,
XmNrightAttachment, XmATTACH_POSITION,
XmNrightPosition, 3, NULL);
XtAddCallback (mdl_list,
XmNextendedSelectionCallback, model_select_cb, NULL);
XtManageChild (mdl_list);
/*
* Create file and map selection widgets first. The
* map canvas events will be set for use by menubar later.
*/
mdl_statext = XtVaCreateManagedWidget ("mdl_statext",
xmTextWidgetClass, mdlform2,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
XmNwidth, 250, NULL);
XtAddCallback (mdl_statext, XmNvalueChangedCallback, set_mdlsta, NULL);
XtAddCallback (mdl_statext, XmNactivateCallback, (XtCallbackProc) Load_mdl_sounding, mdl_list);
str = XmStringCreateLocalized ("Location:");
XtVaCreateManagedWidget ("mdlsta_label",
xmLabelWidgetClass, mdlform2,
XmNlabelString, str,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightWidget, mdl_statext,
XmNtopAttachment, XmATTACH_FORM,
NULL);
XmStringFree (str);
/*
* Create a RowColumn Widget for radio buttons
*/
rowcol = XtVaCreateManagedWidget ("Rc",
xmRowColumnWidgetClass, mdlform2,
XmNorientation, XmHORIZONTAL,
XmNnumColumns, 2,
XmNrightAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
NULL);
one = XmStringCreateLocalized ("Lat/Lon");
two = XmStringCreateLocalized ("Station");
thr = XmStringCreateLocalized ("CPF");
radio_box = XmVaCreateSimpleRadioBox (rowcol,
"radio", 0,
(XtCallbackProc) mdl_cursor_fmt,
XmVaRADIOBUTTON, one, NULL, NULL,
NULL, XmVaRADIOBUTTON, two, NULL,
NULL, NULL, XmVaRADIOBUTTON, thr,
NULL, NULL, NULL, XmNorientation,
XmHORIZONTAL, NULL);
XmStringFree (one);
XmStringFree (two);
XmStringFree (thr);
XtManageChild (radio_box);
XtManageChild (mdlform2);
str = XmStringCreateLocalized ("Model times:");
mdllbl_time = XtVaCreateManagedWidget ("mdlfile_time",
xmLabelWidgetClass, mdlform,
XmNlabelString, str,
XmNleftAttachment,
XmATTACH_POSITION,
XmNleftPosition, 0,
XmNtopAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_POSITION,
XmNrightPosition, 2,
XmNalignment,
XmALIGNMENT_BEGINNING, NULL);
XmStringFree (str);
mdl_map = XtVaCreateManagedWidget ("map",
xmDrawingAreaWidgetClass, mdlform,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, mdllbl_time,
XmNrightAttachment, XmATTACH_FORM,
XmNwidth, 560,
XmNheight, 560,
XmNbackground, pixels[0], NULL);
argcnt = 0;
XtSetArg (args[argcnt], XmNlistSizePolicy, XmCONSTANT);
XtSetArg (args[argcnt], XmNselectionPolicy, XmEXTENDED_SELECT);
argcnt++;
mdlfile_timelist =
XmCreateScrolledList (mdlform, "times", args, argcnt);
/*XtVaSetValues (mdlfile_timelist, XmNvisibleItemCount, 10, NULL); */
XtVaSetValues (XtParent (mdlfile_timelist),
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 0,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, mdllbl_time,
XmNbottomAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightWidget, mdl_map, NULL);
XtAddCallback (mdlfile_timelist,
XmNextendedSelectionCallback,
mod_time_select_cb, (XtPointer) mdl_list);
XtManageChild (mdlfile_timelist);
/* ----- "mouse moved" event handler for cursor position----- */
XtAddEventHandler (mdl_map, PointerMotionMask, FALSE,
(XtEventHandler) mdl_pointer, (XtPointer) NULL);
XtAddCallback (mdl_map, XmNexposeCallback,
(XtCallbackProc) mapw_exposeCb, NULL);
plotData.mode = STNSELECT;
/* ----- "button pressed" event handler for cursor position----- */
XtAddEventHandler (mdl_map, ButtonPressMask,
FALSE, (XtEventHandler) modmap_selCb, NULL);
XtManageChild (mdlform);
/*
* create the menubar for top form
*/
argcnt = 0;
XtSetArg (args[argcnt], XmNtopAttachment, XmATTACH_FORM);
argcnt++;
XtSetArg (args[argcnt], XmNleftAttachment, XmATTACH_POSITION);
argcnt++;
XtSetArg (args[argcnt], XmNleftPosition, 0);
argcnt++;
XtSetArg (args[argcnt], XmNrightAttachment, XmATTACH_FORM);
argcnt++;
menubar = XmCreateMenuBar (mdlmenuform, "menubar", args, argcnt);
argcnt = 0;
XtSetArg (args[argcnt], XmNborderWidth, 1);
argcnt++;
modmenu = NULL;
file_selection_menu ("nsharp_models.tbl", "nsharp", &modmenu,
(XtCallbackProc)model_list_cb, &ier);
if (ier != 0)
{
NxmWarn_show (mdlform,
"NSHARP: ERROR opening $GEMTBL/nsharp/nsharp_models.tbl\nSee system admin istrator.");
mdl_dialog = NULL;
return;
}
mdlstn_opt = NxmMenuPulldownBuild (menubar, NULL, "Select Model",
0, modmenu);
XtSetValues (mdlstn_opt, args, argcnt);
/*
* Create Map pulldown menu
*
* Set the items for the menu bar for the map areas.
*/
nmap = nwxTable->nmap;
for (ii = 0; ii < nmap; ii++)
{
mapmenu[ii].label = (char *)
malloc (strlen (nwxTable->map_info[ii].name) + 1);
strcpy (mapmenu[ii].label, nwxTable->map_info[ii].name);
mapmenu[ii].class = &xmCascadeButtonGadgetClass;
mapmenu[ii].mnemonic = 0;
mapmenu[ii].accelerator = NULL;
mapmenu[ii].accel_text = NULL;
mapmenu[ii].callback = mapprojmdl_cb;
mapmenu[ii].which_widget = (long)ii;
mapmenu[ii].subitems = NULL;
mapmenu[ii].sub_buttons = NULL;
}
mapmenu[nmap].label = NULL;
mapmenu[nmap].class = &xmCascadeButtonGadgetClass;
mapmenu[nmap].mnemonic = 0;
mapmenu[nmap].accelerator = NULL;
mapmenu[nmap].accel_text = NULL;
mapmenu[nmap].callback = NULL;
mapmenu[nmap].which_widget = (long)nmap;
mapmenu[nmap].subitems = NULL;
mapmenu[nmap].sub_buttons = NULL;
NxmMenuPulldownBuild (menubar, NULL, "Area", 0, mapmenu);
for (ii = 0; ii < nmap; ii++)
free (mapmenu[ii].label);
if ((button = XtNameToWidget (menubar, "Area")))
XtSetValues (button, args, argcnt);
maparea_zoom = XmCreateCascadeButton (menubar, "Zoom", NULL, 0);
XtAddCallback (maparea_zoom, XmNactivateCallback,
(XtCallbackProc) mapzoommdl_cb, mdl_map);
XtSetValues (maparea_zoom, args, argcnt);
XtManageChild (maparea_zoom);
maparea_unzoom = XmCreateCascadeButton (menubar, "UnZoom", NULL, 0);
XtAddCallback (maparea_unzoom, XmNactivateCallback,
(XtCallbackProc) mapunzoommdl_cb, mdl_map);
XtSetValues (maparea_unzoom, args, argcnt);
XtManageChild (maparea_unzoom);
mdlfile_ok = XmCreateCascadeButton (menubar, "OK", NULL, 0);
XtAddCallback (mdlfile_ok, XmNactivateCallback,
(XtCallbackProc) popdown_cb, mdl_dialog);
XtAddCallback (mdlfile_ok, XmNactivateCallback,
(XtCallbackProc) Load_mdl_sounding, mdl_list);
XtSetValues (mdlfile_ok, args, argcnt);
XtManageChild (mdlfile_ok);
mdlfile_cancel = XmCreateCascadeButton (menubar, "Cancel", NULL, 0);
XtAddCallback (mdlfile_cancel, XmNactivateCallback,
(XtCallbackProc) popdown_cb, mdl_dialog);
XtSetValues (mdlfile_cancel, args, argcnt);
XtManageChild (mdlfile_cancel);
mdlfile_help = XmCreateCascadeButton (menubar, "Help", NULL, 0);
XtSetValues (mdlfile_help, args, argcnt);
XtAddCallback (mdlfile_help, XmNactivateCallback,
(XtCallbackProc) NxmHelp_helpBtnCb, (XtPointer) 4);
XtManageChild (mdlfile_help);
XtVaSetValues (menubar, XmNmenuHelpWidget, mdlfile_help, NULL);
XtManageChild (menubar);
XtManageChild (mdlmenuform);
/*
* create lat/lon cursor info widget
*/
mdltxtframe = XtVaCreateManagedWidget ("mdl_latlonFrame",
xmFrameWidgetClass, mdlform3,
XmNrightAttachment,
XmATTACH_FORM,
XmNbottomAttachment,
XmATTACH_FORM, XmNtopAttachment,
XmATTACH_FORM, XmNshadowType,
XmSHADOW_IN, NULL);
str = XmStringCreateLocalized ("------;-------");
mdl_cursor_text = XtVaCreateManagedWidget ("cursor_text",
xmLabelWidgetClass,
mdltxtframe, XmNlabelString,
str, XmNrecomputeSize, False,
XmNwidth, 85, NULL);
XmStringFree (str);
XtManageChild (mdlform3);
XtManageChild (mdlpane);
XtManageChild (mdl_dialog);
mod_map.mapindx = 0;
mod_map.zoomflg = 0;
ii = nsharp_mapw_rgstr (mdl_map, map_winname);
XtAddCallback (mdl_map, XmNresizeCallback,
(XtCallbackProc) mapw_resizeCb, NULL);
}
XtManageChild (mdl_dialog);
gslwin (map_winname, &ier, strlen (map_winname));
nsharp_draw_map (map_winname, &mod_map, &ier);
}
/*========================================================================*/
/* ARGSUSED */
void model_list_cb (Widget wdgt, XtPointer clnt, XtPointer call)
/*************************************************************
* MODELLIST_CB *
************************************************************/
{
int ii, ier, lens;
char tmp_str[80];
char path[256], tmpl[256];
/* static int only_f000 = 0; */
if (wdgt == NULL)
{
printf ("look wdgt is null\n");
return;
}
if (XtIsSubclass (wdgt, xmToggleButtonWidgetClass))
{
/* toggling f000 only on/of */
Boolean is_set;
XtVaGetValues (wdgt, XmNset, &is_set, NULL);
/* if (is_set)
only_f000 = 1;
else
only_f000 = 0; NOT used */
}
else if (!XtIsSubclass (wdgt, xmFileSelectionBoxWidgetClass))
{
/* Cascade menu entry */
char *choice;
XmString label_str;
XtVaGetValues (wdgt, XmNlabelString, &label_str, NULL);
choice = XmStringUnparse (label_str, NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
XmStringFree (label_str);
if ((choice[0] == '\0') || (strcmp (choice, "BROWSE") == 0))
{
sprintf (tmpl, "*");
sprintf (path, ".");
}
else
{
int ncyc;
char sep[] = ";";
char *flist, *spos, *epos;
XmStringTable str_list;
#define SOMESIZE 200000
flist = (char *) malloc (SOMESIZE);
gd_gcyc (choice, sep, &ncyc, flist, &ier,
strlen(choice), strlen(sep), SOMESIZE);
if (ier == 0 && ncyc > 0) {
st_null(flist, flist, &lens, &ier, SOMESIZE, SOMESIZE);
str_list = (XmStringTable) XtMalloc ((size_t) ncyc *
sizeof (XmString *));
epos = flist;
ii = 0;
while (epos != NULL)
{
epos = strrchr (flist, sep[0]);
if (epos != NULL)
spos = epos + 1;
else
spos = flist;
if (epos != NULL)
epos[0] = '\0';
sprintf (tmp_str, "%s %s", choice, spos);
str_list[ii] = XmStringCreateLocalized (tmp_str);
ii++;
}
ncyc = ii;
XtVaSetValues (mdl_list, XmNitemCount, ncyc, XmNitems, str_list,
NULL);
XmListDeselectAllItems (mdl_list);
for (ii = 0; ii < ncyc; ii++)
XmStringFree ((XmString) str_list[ii]);
XtFree ((XtPointer) str_list);
XmListDeleteAllItems (mdlfile_timelist); /* clear all times in list */
}
free (flist);
strcpy (tmpl, choice);
}
XtFree (choice);
if (strcmp (tmpl, "*") == 0)
{
file_browse_popup (path, tmpl, toplevel, model_list_cb);
return;
}
}
else
{
/* file selection dialog entry of a single file */
char *choice;
XmFileSelectionBoxCallbackStruct *cbs =
(XmFileSelectionBoxCallbackStruct *) call;
if (cbs)
{
XmStringTable str_list;
choice = XmStringUnparse (cbs->value, NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
str_list = (XmStringTable) XtMalloc (1 * sizeof (XmString *));
str_list[0] = cbs->value;
XtVaSetValues (mdl_list, XmNitemCount, 1, XmNitems, str_list, NULL);
XmListDeselectAllItems (mdl_list);
XmListDeleteAllItems (mdlfile_timelist); /* clear all times in list */
XmListSelectPos (mdl_list, 1, True);
XtFree ((XtPointer) str_list);
XtFree (choice);
}
}
}
/*=====================================================================*/
/* ARGSUSED */
void model_select_cb (Widget wdgt, XtPointer clnt, XtPointer call)
/* Log: *
* T. Piper/SAIC 12/04 Added free(tarr) *
*******************************************************************************/
{
int ii, jj, ier, sumpos = 0;
char *choice;
XmListCallbackStruct *cbs = (XmListCallbackStruct *) call;
XmStringTable str_list;
XtPointer userdata;
struct mlist_struct *mlist;
int *tarr;
if (cbs->reason == XmCR_EXTENDED_SELECT)
{
if (cbs->selected_item_count == 0)
return;
XtVaGetValues (wdgt, XmNuserData, &userdata, NULL);
if (userdata == NULL)
{
mlist =
(struct mlist_struct *) malloc (sizeof (struct mlist_struct));
mlist->ftim = 0;
mlist->posindex = NULL;
mlist->nselect = 0;
XtVaSetValues (wdgt, XmNuserData, (XtPointer) mlist, NULL);
}
else
mlist = (struct mlist_struct *) userdata;
if (mlist->posindex != NULL)
{
free (mlist->posindex);
mlist->posindex = NULL;
mlist->ftim = 0;
}
tarr = (int *) malloc (cbs->selected_item_count * sizeof (int));
for (ii = cbs->selected_item_count - 1; ii >= 0; ii--)
{
int ngdftm, maxt = 500; /* maxt size of mtime_list */
char cycle[] = " ";
char gdfile[256], gdatim[256];
char *spos;
choice = XmStringUnparse (cbs->selected_items[ii], NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
spos = strchr (choice, ' ');
if (spos != NULL)
{
gdfile[0] = '\0';
strncat (gdfile, choice, spos - choice);
spos++;
strcpy (gdatim, spos);
gd_gtmf (gdfile, gdatim, cycle, &maxt, &ngdftm, mtime_list,
&ier, strlen (gdfile), strlen (gdatim), strlen (cycle),
20 /* mtime_list size */ );
}
else
{
int nfiles = 1;
gd_fltm (choice, &nfiles, &maxt, &ngdftm, mtime_list, &ier,
strlen (choice), 20 /* mtime_list size */ );
}
if (ier == 0 && ngdftm > 0)
{
int jj;
str_list = (XmStringTable) XtMalloc ((size_t) ngdftm *
sizeof (XmString *));
for (jj = 0; jj < ngdftm; jj++)
{
int lens;
mtime_list[jj][19] = '\0';
lens = strcspn (mtime_list[jj], "\t \0");
mtime_list[jj][lens] = '\0';
str_list[jj] = XmStringCreateLocalized (mtime_list[jj]);
}
if (sumpos == 0)
XtVaSetValues (mdlfile_timelist, XmNitemCount, ngdftm,
XmNitems, str_list, NULL);
else
XmListAddItems (mdlfile_timelist, str_list, ngdftm,
sumpos + 1);
for (jj = 0; jj < ngdftm; jj++)
XmStringFree ((XmString) str_list[jj]);
XtFree ((XtPointer) str_list);
sumpos = sumpos + ngdftm;
tarr[ii] = sumpos;
}
else
tarr[ii] = -1;
XtFree (choice);
}
XmListDeselectAllItems (mdlfile_timelist);
mlist->posindex = (int *) malloc (sumpos * sizeof (int));
mlist->ftim = sumpos;
jj = 0;
ii = cbs->selected_item_count - 1;
while (jj < sumpos)
{
if (jj < tarr[ii])
{
mlist->posindex[jj] = cbs->selected_item_positions[ii];
jj++;
}
else
ii--;
}
free(tarr);
}
}
/*=====================================================================*/
/* ARGSUSED */
void mod_time_select_cb (Widget wdgt, XtPointer clnt, XtPointer call)
/*************************************************************/
/* MOD_TIME_SELECT_CB */
/*Log: *
* T. Piper/SAIC 12/04 Corrected free for model, cycle, & fhour*
* T. Piper/SAIC 12/04 Corrected malloc for cycle *
***********************************************************************/
{
XmListCallbackStruct *cbs = (XmListCallbackStruct *) call;
Widget cycles = (Widget)clnt;
char *choice;
XtPointer userdata;
XmStringTable item_list;
int ii, jj;
struct mlist_struct *mlist;
if (cbs->reason == XmCR_EXTENDED_SELECT)
{
if (cbs->selected_item_count == 0)
return;
XtVaGetValues (cycles, XmNuserData, &userdata, NULL);
if (userdata == NULL)
{
printf ("userdata is null\n");
return;
}
mlist = (struct mlist_struct *) userdata;
XtVaGetValues (cycles, XmNitems, &item_list, NULL);
if ( mlist->nselect > 0 )
{
for (ii = 0; ii < mlist->nselect; ii++)
{
free (mlist->modlist[ii].model);
free (mlist->modlist[ii].cycle);
free (mlist->modlist[ii].fhour);
}
free (mlist->modlist);
}
mlist->nselect = cbs->selected_item_count;
mlist->modlist =
(struct modfile_struct *) malloc (mlist->nselect *
sizeof (struct modfile_struct));
for (ii = 0; ii < cbs->selected_item_count; ii++)
{
char *spos;
choice = XmStringUnparse (cbs->selected_items[ii], NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
mlist->modlist[ii].fhour = (char *) malloc (strlen (choice) + 1);
strcpy (mlist->modlist[ii].fhour, choice);
XtFree (choice);
jj = cbs->selected_item_positions[ii];
choice = XmStringUnparse (item_list[mlist->posindex[jj - 1] - 1],
NULL, XmCHARSET_TEXT, XmCHARSET_TEXT,
NULL, 0, XmOUTPUT_ALL);
if ((spos = strchr (choice, ' ')) != NULL)
{
mlist->modlist[ii].model = (char *) malloc ((spos - choice) + 1);
mlist->modlist[ii].model[0] = '\0';
strncat (mlist->modlist[ii].model, choice, spos - choice);
spos++;
mlist->modlist[ii].cycle = (char *) malloc (strlen (spos) + 1);
strcpy (mlist->modlist[ii].cycle, spos);
}
else
{
mlist->modlist[ii].model = (char *) malloc (strlen (choice) + 1);
strcpy (mlist->modlist[ii].model, choice);
mlist->modlist[ii].cycle = (char *) malloc (2);
strcpy (mlist->modlist[ii].cycle, "*");
}
XtFree (choice);
}
}
else
{
choice = XmStringUnparse (cbs->item, NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
strcpy (mdlsoundtime, choice);
XtFree (choice);
}
}
/*========================================================================*/
/* ARGSUSED */
void mtime_select_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
/*************************************************************/
/* MTIME_SELECT_CB */
/*************************************************************/
{
XmListCallbackStruct *cbs = (XmListCallbackStruct *)call;
char *choice;
choice = XmStringUnparse (cbs->item, NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
strcpy ( mdlsoundtime, choice );
XtFree (choice);
}
/*========================================================================*/
/* ARGSUSED */
void set_mdlsta ( Widget wdgt, XtPointer clnt, XtPointer call )
/*************************************************************/
/* SET_MDLSTA */
/*************************************************************/
{
char *text_sta;
text_sta = XmTextGetString (wdgt);
if ( text_sta != NULL )
strcpy ( mdlsoundsta, text_sta );
XtFree(text_sta);
}
/*========================================================================*/
/* ARGSUSED */
void mapprojmdl_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
{
int item_no = (long)clnt;
int ier;
mod_map.mapindx = item_no;
mod_map.zoomflg = 0;
nsharp_draw_map ( map_winname, &mod_map, &ier);
}
/*========================================================================*/
/* ARGSUSED */
void mapunzoommdl_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
{
int ier;
mod_map.zoomflg = 0;
nsharp_draw_map ( map_winname, &mod_map, &ier);
}
/*========================================================================*/
void _mapzoommdl ( void )
{
int ier;
nsharp_draw_map ( map_winname, &mod_map, &ier);
}
/*========================================================================*/
/* ARGSUSED */
void mapzoommdl_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
{
Widget mapCanvW = (Widget) clnt;
XtRemoveEventHandler( mapCanvW, PointerMotionMask, FALSE,
(XtEventHandler)mdl_pointer, NULL );
_mapzoom_cb ( mapCanvW, NULL, &mod_map, _mapzoommdl );
XtAddEventHandler( mapCanvW, PointerMotionMask, FALSE,
(XtEventHandler)mdl_pointer, (XtPointer)NULL );
}