int main(int argc, char *argv[]) { char const *wks_type = "x11"; int appid,wid,vcid,vfid; int rlist,grlist; ng_size_t len_dims[3]; float reflen, ref; float x[a][b][c]; FILE * fd; int i,j,k; /* * Generate vector data array */ char filename[256]; const char *dir = _NGGetNCARGEnv("data"); sprintf( filename, "%s/asc/uvdata0.asc", dir ); fd = fopen(filename,"r"); for (k = 0; k < a; k++) { for (j = 0; j < b; j++) { for (i = 0; i < c; i++) { fscanf(fd,"%f", &x[k][j][i]); } } } /* * Initialize the high level utility library */ NhlInitialize(); /* * Create an application context. Set the app dir to the current * directory so the application looks for a resource file in the working * directory. */ rlist = NhlRLCreate(NhlSETRL); grlist = NhlRLCreate(NhlGETRL); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNappUsrDir,"./"); NhlCreate(&appid,"vc03",NhlappClass,NhlDEFAULT_APP,rlist); if (!strcmp(wks_type,"ncgm") || !strcmp(wks_type,"NCGM")) { /* * Create a meta file workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkMetaName,"./vc03c.ncgm"); NhlCreate(&wid,"vc03Work", NhlncgmWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"x11") || !strcmp(wks_type,"X11")) { /* * Create an X workstation. */ NhlRLClear(rlist); NhlRLSetInteger(rlist,NhlNwkPause,True); NhlCreate(&wid,"vc03Work",NhlcairoWindowWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"oldps") || !strcmp(wks_type,"OLDPS")) { /* * Create an older-style PostScript workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkPSFileName,"vc03c.ps"); NhlCreate(&wid,"vc03Work",NhlpsWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"oldpdf") || !strcmp(wks_type,"OLDPDF")) { /* * Create an older-style PDF workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkPDFFileName,"vc03c.pdf"); NhlCreate(&wid,"vc03Work",NhlpdfWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"pdf") || !strcmp(wks_type,"PDF") || !strcmp(wks_type,"ps") || !strcmp(wks_type,"PS")) { /* * Create a cairo PS/PDF workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkFileName,"vc03c"); NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type); NhlCreate(&wid,"vc03Work",NhlcairoDocumentWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"png") || !strcmp(wks_type,"PNG")) { /* * Create a cairo PNG workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkFileName,"vc03c"); NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type); NhlCreate(&wid,"vc03Work",NhlcairoImageWorkstationClass,appid,rlist); } /* * Create a VectorField data object using the data set defined above. * By default the array bounds will define the data boundaries (zero-based, * as in C language conventions) */ len_dims[0] = a; len_dims[1] = b; len_dims[2] = c; NhlRLClear(rlist); NhlRLSetMDFloatArray(rlist,NhlNvfDataArray,&x[0][0][0],3,len_dims); NhlRLSetFloat(rlist,NhlNvfXCStartV, -180.0); NhlRLSetFloat(rlist,NhlNvfXCEndV, 0.0); NhlRLSetFloat(rlist,NhlNvfYCStartV, 0.0); NhlRLSetFloat(rlist,NhlNvfYCEndV, 90.0); NhlRLSetFloat(rlist,NhlNvfYCStartSubsetV, 20.0); NhlRLSetFloat(rlist,NhlNvfYCEndSubsetV, 80.0); NhlCreate(&vfid,"vectorfield",NhlvectorFieldClass,appid,rlist); /* * Create a VectorPlot object, supplying the VectorField object as data */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Filled Arrow VectorPlot"); NhlRLSetFloat(rlist,NhlNvcRefMagnitudeF, 20.0); NhlRLSetString(rlist,NhlNvcFillArrowsOn, "True"); NhlRLSetFloat(rlist,NhlNvcMinFracLengthF, 0.2); NhlRLSetInteger(rlist,NhlNvcVectorFieldData,vfid); NhlCreate(&vcid,"vectorplot",NhlvectorPlotClass,wid,rlist); NhlRLClear(grlist); NhlRLGetFloat(grlist,NhlNvcRefLengthF,&reflen); NhlGetValues(vcid,grlist); ref= 1.5 * reflen; NhlRLClear(rlist); NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref); NhlSetValues(vcid,rlist); NhlDraw(vcid); NhlFrame(wid); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Variation #1:: Constant Width"); NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF, 0.15); NhlRLSetFloat(rlist,NhlNvcFillArrowMinFracWidthF, 1.0); NhlSetValues(vcid,rlist); NhlDraw(vcid); NhlFrame(wid); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Variation #2"); NhlRLSetFloat(rlist,NhlNvcFillArrowMinFracWidthF,0.25); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadMinFracXF,0.0); NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.2); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,0.8); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,0.7); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.2); NhlSetValues(vcid,rlist); NhlDraw(vcid); NhlFrame(wid); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Variation #3"); ref = 1.2 * reflen; NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref); NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.3); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,0.4); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,0.35); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.3); NhlSetValues(vcid,rlist); NhlDraw(vcid); NhlFrame(wid); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Variation #4"); ref = 1.2 * reflen; NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref); NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.2); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,1.0); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,1.0); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.2); NhlSetValues(vcid,rlist); NhlDraw(vcid); NhlFrame(wid); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Variation #5"); ref = 0.8 * reflen; NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref); NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.2); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,1.5); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,1.0); NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.5); NhlSetValues(vcid,rlist); NhlDraw(vcid); NhlFrame(wid); /* * Destroy the objects created, close the HLU library and exit. */ NhlDestroy(appid); NhlClose(); exit(0); }
void guiNhlRLGetFloat(int id, char *resname, float *value) { NhlRLGetFloat(id, (NhlString) resname, value); }
int main() { int appid,wid,cnid,dataid,llid; int rlist, grlist; ng_size_t len_dims[2]; float xvp,yvp,heightvp,widthvp; char const *wks_type = "x11"; /* * Initialize the high level utility library */ NhlInitialize(); /* * Create an application context. Set the app dir to the current directory * so the application looks for the resource file the directory it executes * from. */ rlist = NhlRLCreate(NhlSETRL); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNappUsrDir,"./"); NhlCreate(&appid,"cn03",NhlappClass,NhlDEFAULT_APP,rlist); if (!strcmp(wks_type,"ncgm") || !strcmp(wks_type,"NCGM")) { /* * Create a meta file workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkMetaName,"./cn03c.ncgm"); NhlCreate(&wid,"cn03Work", NhlncgmWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"x11") || !strcmp(wks_type,"X11")) { /* * Create an X workstation. */ NhlRLClear(rlist); NhlRLSetInteger(rlist,NhlNwkPause,True); NhlCreate(&wid,"cn03Work", NhlcairoWindowWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"oldps") || !strcmp(wks_type,"OLDPS")) { /* * Create an older-style PostScript workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkPSFileName,"./cn03c.ps"); NhlCreate(&wid,"cn03Work", NhlpsWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"oldpdf") || !strcmp(wks_type,"OLDPDF")) { /* * Create an older-style PDF workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkPDFFileName,"./cn03c.pdf"); NhlCreate(&wid,"cn03Work", NhlpdfWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"pdf") || !strcmp(wks_type,"PDF") || !strcmp(wks_type,"ps") || !strcmp(wks_type,"PS")) { /* * Create a cairo PS/PDF workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkFileName,"./cn03c"); NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type); NhlCreate(&wid,"cn03Work", NhlcairoDocumentWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"png") || !strcmp(wks_type,"PNG")) { /* * Create a cairo PNG workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkFileName,"./cn03c"); NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type); NhlCreate(&wid,"cn03Work", NhlcairoImageWorkstationClass,NhlDEFAULT_APP,rlist); } /* * Create a scalar field data object with a linear X dimension representing * latitude and an irregular Y dimension representing geopotential height. * Define the start and end points of the data, based on the dataset. */ NhlRLClear(rlist); len_dims[0] = N, len_dims[1] = M; NhlRLSetMDFloatArray(rlist,NhlNsfDataArray,T,2,len_dims); NhlRLSetFloatArray(rlist,NhlNsfYArray,level,NhlNumber(level)); NhlRLSetFloat(rlist,NhlNsfXCStartV,-90.0); NhlRLSetFloat(rlist,NhlNsfXCEndV,90.0); NhlRLSetFloat(rlist,NhlNsfYCStartV,1000.0); NhlRLSetFloat(rlist,NhlNsfYCEndV,100.0); NhlCreate(&dataid,"mydata",NhlscalarFieldClass,NhlDEFAULT_APP, rlist); /* * Create a ContourPlot object. Since ContourPlot contains a TickMark object by * default, the non-default TickMark resources can be set in the ContourPlot * object. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Profile @ 105~S~o~N~W - Frame 1"); NhlRLSetInteger(rlist,NhlNcnScalarFieldData,dataid); NhlRLSetFloat(rlist,NhlNvpXF,0.125); NhlRLSetFloat(rlist,NhlNvpYF,0.85); NhlRLSetFloat(rlist,NhlNvpWidthF,0.6); NhlRLSetFloat(rlist,NhlNvpHeightF,0.6); NhlRLSetFloat(rlist,NhlNcnLevelSpacingF,5.0); NhlRLSetInteger(rlist,NhlNtmXBMode,NhlEXPLICIT); NhlRLSetInteger(rlist,NhlNtmXBMinorOn,False); NhlRLSetFloatArray(rlist, NhlNtmXBValues,labellocs,NhlNumber(labellocs)); NhlRLSetStringArray(rlist, NhlNtmXBLabels,labels,NhlNumber(labels)); NhlCreate(&cnid,"ContourPlot1",NhlcontourPlotClass,wid,rlist); NhlDraw(cnid); NhlFrame(wid); /* * Color and add dash patterns to the lines, then display a legend * listing the line types. The position of the Legend is controlled by * resources set in the resource file. Thicken lines. * Note that the Legend and LabelBar are provided to the ContourPlot object * by its PlotManager (created by default when the ContourPlot object * is initialized). Therefore the resources to control them have the * prefix 'pm' rather than 'cn'. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Profile @ 105~S~o~N~W - Frame 2"); NhlRLSetInteger(rlist,NhlNcnMonoLineColor,False); NhlRLSetInteger(rlist,NhlNcnMonoLineDashPattern,False); NhlRLSetString(rlist,NhlNpmLegendDisplayMode,"always"); NhlSetValues(cnid,rlist); NhlDraw(cnid); NhlFrame(wid); /* * Turn lines off, and use solid color fill instead. * Remove the Legend and display a LabelBar. * Turn off line and high/low labels. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Profile @ 105~S~o~N~W - Frame 3"); NhlRLSetString(rlist,NhlNcnLinesOn,"false"); NhlRLSetString(rlist,NhlNcnFillOn,"true"); NhlRLSetString(rlist,NhlNpmLegendDisplayMode,"never"); NhlRLSetString(rlist,NhlNpmLabelBarDisplayMode,"always"); NhlRLSetString(rlist,NhlNcnLineLabelsOn,"false"); NhlRLSetString(rlist,NhlNcnHighLabelsOn,"false"); NhlRLSetString(rlist,NhlNcnLowLabelsOn,"false"); NhlSetValues(cnid,rlist); NhlDraw(cnid); NhlFrame(wid); /* * Now show the plot with the Y-Axis linearized, by overlaying the * plot on a LogLinPlot object. Retrieve the current view coordinates * of the ContourPlot object and pass them on to the LogLinPlot object. * Note the LogLinPlot needs to be told the data boundaries. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Profile @ 105~S~o~N~W - Frame 4"); NhlSetValues(cnid,rlist); grlist = NhlRLCreate(NhlGETRL); NhlRLClear(grlist); NhlRLGetFloat(grlist,NhlNvpXF,&xvp); NhlRLGetFloat(grlist,NhlNvpYF,&yvp); NhlRLGetFloat(grlist,NhlNvpWidthF,&widthvp); NhlRLGetFloat(grlist,NhlNvpHeightF,&heightvp); NhlGetValues(cnid,grlist); NhlRLClear(rlist); NhlRLSetFloat(rlist,NhlNvpXF,xvp); NhlRLSetFloat(rlist,NhlNvpYF,yvp); NhlRLSetFloat(rlist,NhlNvpWidthF,widthvp); NhlRLSetFloat(rlist,NhlNvpHeightF,heightvp); NhlRLSetFloat(rlist,NhlNtrXMinF,-90.0); NhlRLSetFloat(rlist,NhlNtrXMaxF,90.0); NhlRLSetFloat(rlist,NhlNtrYMaxF,1000.0); NhlRLSetFloat(rlist,NhlNtrYMinF,100.0); NhlRLSetString(rlist,NhlNtrYReverse,"True"); NhlCreate(&llid,"LogLin1",NhllogLinPlotClass,wid,rlist); /* * The LogLinPlot becomes the Base Plot, since it controls the coordinate * system that we are mapping to. Overlay the ContourPlot object on the base, * then plot the LogLinPlot object. Note that you cannot draw the ContourPlot * object directly, once it becomes an overlay Plot. */ NhlAddOverlay(llid,cnid,-1); NhlDraw(llid); NhlFrame(wid); NhlDestroy(llid); NhlDestroy(dataid); NhlDestroy(cnid); NhlDestroy(wid); NhlDestroy(appid); NhlClose(); exit(0); }
int main(int argc, char *argv[]) { char const *wks_type = "x11"; int appid,wid,stid,vfid; int rlist,grlist; ng_size_t len_dims[2]; float stepsize,arrowlength,spacing; float U[N][M],V[N][M]; /* * Generate vector data arrays */ { float igrid, jgrid; int i,j; igrid = 2.0 * PI / (float) M; jgrid = 2.0 * PI / (float) N; for (j = 0; j < N; j++) { for (i = 0; i < M; i++) { U[j][i] = 10.0 * cos(jgrid * (float) j); V[j][i] = 10.0 * cos(igrid * (float) i); } } } /* * Initialize the high level utility library */ NhlInitialize(); /* * Create an application context. Set the app dir to the current * directory so the application looks for a resource file in the working * directory. */ rlist = NhlRLCreate(NhlSETRL); grlist = NhlRLCreate(NhlGETRL); NhlRLClear(rlist); NhlRLSetString(rlist,NhlNappUsrDir,"./"); NhlCreate(&appid,"st02",NhlappClass,NhlDEFAULT_APP,rlist); if (!strcmp(wks_type,"ncgm") || !strcmp(wks_type,"NCGM")) { /* * Create a meta file workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkMetaName,"./st02c.ncgm"); NhlCreate(&wid,"st02Work", NhlncgmWorkstationClass,NhlDEFAULT_APP,rlist); } else if (!strcmp(wks_type,"x11") || !strcmp(wks_type,"X11")) { /* * Create an X workstation. */ NhlRLClear(rlist); NhlRLSetInteger(rlist,NhlNwkPause,True); NhlCreate(&wid,"st02Work",NhlcairoWindowWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"oldps") || !strcmp(wks_type,"OLDPS")) { /* * Create an older-style PostScript workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkPSFileName,"st02c.ps"); NhlCreate(&wid,"st02Work",NhlpsWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"oldpdf") || !strcmp(wks_type,"OLDPDF")) { /* * Create an older-style PDF workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkPDFFileName,"st02c.pdf"); NhlCreate(&wid,"st02Work",NhlpdfWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"pdf") || !strcmp(wks_type,"PDF") || !strcmp(wks_type,"ps") || !strcmp(wks_type,"PS")) { /* * Create a cairo PS/PDF workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkFileName,"st02c"); NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type); NhlCreate(&wid,"st02Work",NhlcairoDocumentWorkstationClass,appid,rlist); } else if (!strcmp(wks_type,"png") || !strcmp(wks_type,"PNG")) { /* * Create a cairo PNG workstation. */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNwkFileName,"st02c"); NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type); NhlCreate(&wid,"st02Work",NhlcairoImageWorkstationClass,appid,rlist); } /* * Create a VectorField data object using the data set defined above. * By default the array bounds will define the data boundaries (zero-based, * as in C language conventions) */ len_dims[0] = N; len_dims[1] = M; NhlRLClear(rlist); NhlRLSetMDFloatArray(rlist,NhlNvfUDataArray,&U[0][0],2,len_dims); NhlRLSetMDFloatArray(rlist,NhlNvfVDataArray,&V[0][0],2,len_dims); NhlCreate(&vfid,"vectorfield",NhlvectorFieldClass,appid,rlist); /* * Create a StreamlinePlot object, supplying the VectorField object as data */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString, "Modifying StreamlinePlot resources"); NhlRLSetInteger(rlist,NhlNstVectorFieldData,vfid); NhlCreate(&stid,"streamlineplot",NhlstreamlinePlotClass,wid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Get the values of several resources that are set dynamically based * on the assumed NDC size of a grid cell. Each of this will be separately * modified in the course of this example to illustrate their effect. */ NhlRLClear(grlist); NhlRLGetFloat(grlist,NhlNstStepSizeF,&stepsize); NhlRLGetFloat(grlist,NhlNstArrowLengthF,&arrowlength); NhlRLGetFloat(grlist,NhlNstMinLineSpacingF,&spacing); NhlGetValues(stid,grlist); /* * Increase the step size */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Larger Step Size"); NhlRLSetFloat(rlist,NhlNstStepSizeF,stepsize * 4.0); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Decrease the step size */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Smaller Step Size"); NhlRLSetFloat(rlist,NhlNstStepSizeF,stepsize * 0.25); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Increase the minimum line spacing */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Larger Minimum Line Spacing"); NhlRLSetFloat(rlist,NhlNstStepSizeF,stepsize); NhlRLSetFloat(rlist,NhlNstMinLineSpacingF, spacing * 4.0); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Decrease the minimum line spacing */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Smaller Minimum Line Spacing"); NhlRLSetFloat(rlist,NhlNstMinLineSpacingF,spacing * 0.25); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Increase the line starting grid stride */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Larger Line Starting Grid Stride"); NhlRLSetFloat(rlist,NhlNstMinLineSpacingF,spacing); NhlRLSetInteger(rlist,NhlNstLineStartStride,3); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Decrease the line starting grid stride */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Smaller Line Starting Grid Stride"); NhlRLSetInteger(rlist,NhlNstLineStartStride,1); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Increase the arrow size */ NhlRLClear(rlist); NhlRLSetString(rlist,NhlNtiMainString,"Larger Arrows"); NhlRLSetInteger(rlist,NhlNstLineStartStride,2); NhlRLSetFloat(rlist,NhlNstArrowLengthF, arrowlength * 2.0); NhlSetValues(stid,rlist); NhlDraw(stid); NhlFrame(wid); /* * Destroy the objects created, close the HLU library and exit. */ NhlDestroy(appid); NhlClose(); exit(0); }