int main(int argc,char *argv[]) { int s=0; int arg=0; FILE *fp; char lbuf[256]; struct FrameBuffer *img=NULL; struct XMLdata *xmldata=NULL; struct FrameBufferXML xmlimg; unsigned char help=0; unsigned char option=0; OptionAdd(&opt,"-help",'x',&help); OptionAdd(&opt,"-option",'x',&option); arg=OptionProcess(1,argc,argv,&opt,NULL); if (help==1) { OptionPrintInfo(stdout,hlpstr); exit(0); } if (option==1) { OptionDump(stdout,&opt); exit(0); } xmldata=XMLMake(); xmlimg.xml=xmldata; xmlimg.img=&img; XMLSetStart(xmldata,FrameBufferXMLStart,&xmlimg); XMLSetEnd(xmldata,FrameBufferXMLEnd,&xmlimg); if (arg<argc) { fp=fopen(argv[arg],"r"); if (fp==NULL) { fprintf(stderr,"Error opening file.\n"); exit(-1); } } else fp=stdin; while(fgets(lbuf,255,fp) !=NULL) { s=XMLDecode(xmldata,lbuf,strlen(lbuf)); if (s !=0) break; } if (s !=0) { fprintf(stderr,"Error decoding image.\n"); exit(-1); } if (arg<argc) fclose(fp); if (img !=NULL) FrameBufferSavePNG(img,stdout); return 0; }
int main(int argc,char *argv[]) { #ifdef _XLIB_ int xdf=0; int xd=0; struct XwinDisplay *dp; struct XwinWindow *win; char *display_name=NULL; char *wname="fov_plot"; int xdoff=-1; int ydoff=-1; #endif struct FrameBuffer *img=NULL; struct PostScript *psdata=NULL; FILE *fontfp=NULL; char *fntdbfname=NULL; struct FrameBufferFontDB *fontdb=NULL; unsigned int bgcol; unsigned int txtcol; int arg; char *envstr=NULL; char *cfname=NULL; FILE *fp; float wdt=540,hgt=540; float pad=0; char *fontname=NULL; float fontsize=10.0; char *dfontname="Helvetica"; float width=0.5; struct Plot *plot=NULL; struct Splot *splot=NULL; float xpoff=40,ypoff=40; unsigned char psflg=0; unsigned char xmlflg=0; unsigned char ppmflg=0; unsigned char ppmxflg=0; unsigned char pngflg=0; unsigned char gflg=0; unsigned char pflg=0; unsigned char help=0; unsigned char option=0; char *bgcol_txt=NULL; char *txtcol_txt=NULL; unsigned char sqflg=0; MapTFunction tfunc; unsigned char flip=0; unsigned char gvp=0; unsigned char ortho=0; unsigned char stereo=0; unsigned char cylind=0; float lat=90,lon=0; float latmin=50.0; float sf=1.0; float alt=0.0; unsigned char magflg=0; unsigned char rotflg=0; unsigned char mapflg=0; unsigned char fmapflg=0; unsigned char bndflg=0; unsigned char grdflg=0; unsigned char tmkflg=0; unsigned char tlblflg=0; unsigned char ofovflg=0; unsigned char fofovflg=0; unsigned char cfovflg=0; unsigned char fcfovflg=0; unsigned char fovflg=0; unsigned char ffovflg=0; unsigned char grdontop=0; unsigned char dotflg=0; int tmtick=3; unsigned char lstflg=0; unsigned char trmflg=0; unsigned char ftrmflg=0; char *grdcol_txt=NULL; char *cstcol_txt=NULL; char *bndcol_txt=NULL; char *lndcol_txt=NULL; char *seacol_txt=NULL; char *trmcol_txt=NULL; char *ftrmcol_txt=NULL; char *tmkcol_txt=NULL; char *ofovcol_txt=NULL; char *fofovcol_txt=NULL; char *fovcol_txt=NULL; char *ffovcol_txt=NULL; char *cfovcol_txt=NULL; char *fcfovcol_txt=NULL; unsigned int grdcol; unsigned int cstcol; unsigned int bndcol; unsigned int lndcol; unsigned int seacol; unsigned int trmcol; unsigned int ftrmcol; unsigned int tmkcol; unsigned int ofovcol; unsigned int fofovcol; unsigned int fovcol; unsigned int ffovcol; unsigned int cfovcol; unsigned int fcfovcol; FILE *mapfp; float marg[4]; int i; char *tmetxt=NULL; char *dtetxt=NULL; double tval=-1; double dval=-1; int yr,mo,dy,hr,mt; double sc; int yrsec; float tme_shft; double LsoT,LT,Hangle,dec,eqt; float dotr=2; int stid=-1; char *ststr=NULL; int stnum=0; char tsfx[16]; envstr=getenv("MAPDATA"); mapfp=fopen(envstr,"r"); map=MapFread(mapfp); fclose(mapfp); envstr=getenv("BNDDATA"); mapfp=fopen(envstr,"r"); bnd=MapBndFread(mapfp); fclose(mapfp); envstr=getenv("SD_RADAR"); if (envstr==NULL) { fprintf(stderr,"Environment variable 'SD_RADAR' must be defined.\n"); exit(-1); } fp=fopen(envstr,"r"); if (fp==NULL) { fprintf(stderr,"Could not locate radar information file.\n"); exit(-1); } network=RadarLoad(fp); fclose(fp); if (network==NULL) { fprintf(stderr,"Failed to read radar information.\n"); exit(-1); } envstr=getenv("SD_HDWPATH"); if (envstr==NULL) { fprintf(stderr,"Environment variable 'SD_HDWPATH' must be defined.\n"); exit(-1); } RadarLoadHardware(envstr,network); bgcol=PlotColor(0xff,0xff,0xff,0xff); txtcol=PlotColor(0x00,0x00,0x00,0xff); grdcol=PlotColor(0x20,0x40,0x60,0xff); cstcol=PlotColor(0xa0,0xa0,0xa0,0xff); bndcol=PlotColor(0x80,0x80,0x80,0xff); lndcol=PlotColor(0xff,0xff,0xf0,0xff); seacol=PlotColor(0xe0,0xf0,0xff,0xff); tmkcol=PlotColor(0x00,0x00,0x00,0xff); ofovcol=PlotColor(0x00,0x00,0x00,0xff); fofovcol=PlotColor(0xff,0xff,0xff,0xff); fovcol=PlotColor(0x00,0x00,0x00,0xff); ffovcol=PlotColor(0xc0,0x00,0x00,0xff); trmcol=PlotColor(0x80,0x80,0x80,0xff); ftrmcol=PlotColor(0x80,0x80,0x80,0xff); cfovcol=PlotColor(0x00,0x00,0x00,0xff); fcfovcol=PlotColor(0xff,0xff,0xff,0xff); OptionAdd(&opt,"-help",'x',&help); OptionAdd(&opt,"-option",'x',&option); OptionAdd(&opt,"cf",'t',&cfname); #ifdef _XLIB_ OptionAdd(&opt,"x",'x',&xd); OptionAdd(&opt,"display",'t',&display_name); OptionAdd(&opt,"xoff",'i',&xdoff); OptionAdd(&opt,"yoff",'i',&ydoff); #endif OptionAdd(&opt,"ppm",'x',&ppmflg); OptionAdd(&opt,"ppmx",'x',&ppmxflg); OptionAdd(&opt,"xml",'x',&xmlflg); OptionAdd(&opt,"png",'x',&pngflg); OptionAdd(&opt,"ps",'x',&psflg); OptionAdd(&opt,"xp",'f',&xpoff); OptionAdd(&opt,"yp",'f',&ypoff); OptionAdd(&opt,"wdt",'f',&wdt); OptionAdd(&opt,"hgt",'f',&hgt); OptionAdd(&opt,"pad",'f',&pad); OptionAdd(&opt,"bgcol",'t',&bgcol_txt); OptionAdd(&opt,"txtcol",'t',&txtcol_txt); OptionAdd(&opt,"square",'x',&sqflg); OptionAdd(&opt,"ortho",'x',&ortho); OptionAdd(&opt,"stereo",'x',&stereo); OptionAdd(&opt,"gvp",'x',&gvp); OptionAdd(&opt,"lat",'f',&lat); OptionAdd(&opt,"lon",'f',&lon); OptionAdd(&opt,"latmin",'f',&latmin); OptionAdd(&opt,"sf",'f',&sf); OptionAdd(&opt,"mag",'x',&magflg); OptionAdd(&opt,"rotate",'x',&rotflg); OptionAdd(&opt,"alt",'f',&alt); OptionAdd(&opt,"flip",'x',&flip); OptionAdd(&opt,"coast",'x',&mapflg); OptionAdd(&opt,"fcoast",'x',&fmapflg); OptionAdd(&opt,"bnd",'x',&bndflg); OptionAdd(&opt,"grd",'x',&grdflg); OptionAdd(&opt,"tmk",'x',&tmkflg); OptionAdd(&opt,"grdontop",'x',&grdontop); OptionAdd(&opt,"fov",'x',&fovflg); OptionAdd(&opt,"ffov",'x',&ffovflg); OptionAdd(&opt,"ofov",'x',&ofovflg); OptionAdd(&opt,"fofov",'x',&fofovflg); OptionAdd(&opt,"cfov",'x',&cfovflg); OptionAdd(&opt,"fcfov",'x',&fcfovflg); OptionAdd(&opt,"tmtick",'i',&tmtick); OptionAdd(&opt,"lst",'x',&lstflg); OptionAdd(&opt,"term",'x',&trmflg); OptionAdd(&opt,"fterm",'x',&ftrmflg); OptionAdd(&opt,"grdcol",'t',&grdcol_txt); OptionAdd(&opt,"cstcol",'t',&cstcol_txt); OptionAdd(&opt,"bndcol",'t',&bndcol_txt); OptionAdd(&opt,"lndcol",'t',&lndcol_txt); OptionAdd(&opt,"seacol",'t',&seacol_txt); OptionAdd(&opt,"trmcol",'t',&trmcol_txt); OptionAdd(&opt,"tmkcol",'t',&tmkcol_txt); OptionAdd(&opt,"fovcol",'t',&fovcol_txt); OptionAdd(&opt,"ffovcol",'t',&ffovcol_txt); OptionAdd(&opt,"ofovcol",'t',&ofovcol_txt); OptionAdd(&opt,"fofovcol",'t',&fofovcol_txt); OptionAdd(&opt,"cfovcol",'t',&cfovcol_txt); OptionAdd(&opt,"fcfovcol",'t',&fcfovcol_txt); OptionAdd(&opt,"st",'t',&ststr); OptionAdd(&opt,"t",'t',&tmetxt); OptionAdd(&opt,"d",'t',&dtetxt); OptionAdd(&opt,"tmlbl",'x',&tlblflg); OptionAdd(&opt,"fontname",'t',&fontname); OptionAdd(&opt,"fontsize",'f',&fontsize); OptionAdd(&opt,"lnewdt",'f',&width); OptionAdd(&opt,"dotr",'f',&dotr); OptionAdd(&opt,"dot",'x',&dotflg); arg=OptionProcess(1,argc,argv,&opt,NULL); if (cfname !=NULL) { /* load the configuration file */ int farg; do { fp=fopen(cfname,"r"); if (fp==NULL) break; free(cfname); cfname=NULL; optf=OptionProcessFile(fp); if (optf !=NULL) { farg=OptionProcess(0,optf->argc,optf->argv,&opt,NULL); OptionFreeFile(optf); } fclose(fp); } while (cfname !=NULL); } if (help==1) { OptionPrintInfo(stdout,hlpstr); exit(0); } if (option==1) { OptionDump(stdout,&opt); exit(0); } if (tmetxt !=NULL) tval=strtime(tmetxt); if (dtetxt !=NULL) dval=strdate(dtetxt); tval+=dval; TimeEpochToYMDHMS(tval,&yr,&mo,&dy,&hr,&mt,&sc); yrsec=TimeYMDHMSToYrsec(yr,mo,dy,hr,mt,sc); if (magflg) { MapModify(map,AACGMtransform,NULL); MapModify(bnd,AACGMtransform,NULL); } fov=make_fov(tval,network,alt); if (magflg) MapModify(fov,AACGMtransform,NULL); if (tmtick<1) tmtick=1; if (tmtick>6) tmtick=6; if ((ortho==0) && (stereo==0)) cylind=1; if (grdflg) grd=make_grid(15,10,cylind); if (tmkflg) tmk=make_grid(30*tmtick,10,cylind); if ((lat<0) && (latmin>0)) latmin=-latmin; if ((lat>0) && (latmin<0)) latmin=-latmin; if (trmflg || ftrmflg) { if ((cylind) || (ortho) | (gvp)) trm=SZATerminator(yr,mo,dy,hr,mt,sc,0,magflg, 1.0,90.0); else if (lat>0) trm=SZATerminator(yr,mo,dy,hr,mt,sc,1,magflg, 1.0,90.0); else trm=SZATerminator(yr,mo,dy,hr,mt,sc,-1,magflg,1.0,90.0); } marg[0]=lat; marg[1]=lon; tfunc=MapCylindrical; if (ortho) tfunc=MapOrthographic; if (stereo) tfunc=MapStereographic; if (gvp) tfunc=MapGeneralVerticalPerspective; if ((ortho) || (gvp)) marg[2]=sf; else if (stereo) marg[2]=1.25*0.5*sf*90.0/(90-fabs(latmin)); else marg[2]=1; marg[3]=flip; strcpy(tsfx,"LT"); if (magflg) strcpy(tsfx,"MLT"); else if (lstflg) strcpy(tsfx,"LST"); dec=SZASolarDec(yr,mo,dy,hr,mt,sc); eqt=SZAEqOfTime(yr,mo,dy,hr,mt,sc); if (magflg) tme_shft=-MLTConvertYrsec(yr,yrsec,0.0)*15.0; else { if (lstflg) { LsoT=(hr*3600+mt*60+sc)+eqt; Hangle=15*(LsoT/3600); tme_shft=-Hangle; } else { LT=(hr*3600+mt*60+sc); Hangle=15*(LT/3600); tme_shft=-Hangle; } } if (lat<0) tme_shft+=180.0; if (rotflg) marg[1]=lon+tme_shft; if ((cylind) || (sqflg)) clip=MapSquareClip(); else clip=MapCircleClip(10); if (mapflg || fmapflg) { nmap=MapTransform(map,2*sizeof(float),PolygonXYbbox, tfunc,marg); if (cylind) nmap=wrap(nmap); pmap=PolygonClip(clip,nmap); } if (bndflg) { nbnd=MapTransform(bnd,2*sizeof(float),PolygonXYbbox, tfunc,marg); if (cylind) nbnd=wrap(nbnd); pbnd=PolygonClip(clip,nbnd); } if (grdflg) { ngrd=MapTransform(grd,2*sizeof(float),PolygonXYbbox, tfunc,marg); if (cylind) ngrd=wrap(ngrd); pgrd=PolygonClip(clip,ngrd); } if (trmflg || ftrmflg) { ntrm=MapTransform(trm,2*sizeof(float),PolygonXYbbox, tfunc,marg); if (cylind) ntrm=wrap(ntrm); ptrm=PolygonClip(clip,ntrm); } nfov=MapTransform(fov,2*sizeof(float),PolygonXYbbox, tfunc,marg); if (cylind) nfov=wrap(nfov); pfov=PolygonClip(clip,nfov); if (tmkflg) { float tmp; tmp=marg[1]; if (rotflg) marg[1]=0; else marg[1]=lon-tme_shft; ntmk=MapTransform(tmk,2*sizeof(float),PolygonXYbbox, tfunc,marg); ptmk=PolygonClip(clip,ntmk); marg[1]=tmp; } if (bgcol_txt !=NULL) bgcol=PlotColorStringRGBA(bgcol_txt); if (txtcol_txt !=NULL) txtcol=PlotColorStringRGBA(txtcol_txt); if (grdcol_txt !=NULL) grdcol=PlotColorStringRGBA(grdcol_txt); if (cstcol_txt !=NULL) cstcol=PlotColorStringRGBA(cstcol_txt); if (bndcol_txt !=NULL) bndcol=PlotColorStringRGBA(bndcol_txt); if (lndcol_txt !=NULL) lndcol=PlotColorStringRGBA(lndcol_txt); if (seacol_txt !=NULL) seacol=PlotColorStringRGBA(seacol_txt); if (trmcol_txt !=NULL) trmcol=PlotColorStringRGBA(trmcol_txt); if (ftrmcol_txt !=NULL) ftrmcol=PlotColorStringRGBA(ftrmcol_txt); if (tmkcol_txt !=NULL) tmkcol=PlotColorStringRGBA(tmkcol_txt); if (fovcol_txt !=NULL) fovcol=PlotColorStringRGBA(fovcol_txt); if (ofovcol_txt !=NULL) ofovcol=PlotColorStringRGBA(ofovcol_txt); if (cfovcol_txt !=NULL) cfovcol=PlotColorStringRGBA(cfovcol_txt); if (ffovcol_txt !=NULL) ffovcol=PlotColorStringRGBA(ffovcol_txt); if (fofovcol_txt !=NULL) fofovcol=PlotColorStringRGBA(fofovcol_txt); if (fcfovcol_txt !=NULL) fcfovcol=PlotColorStringRGBA(fcfovcol_txt); if ((wdt==0) || (hgt==0)) { fprintf(stderr,"invalid plot size.\n"); exit(-1); } if (tlblflg) pad=10+fontsize; if (fontname==NULL) fontname=dfontname; fntdbfname=getenv("FONTDB"); fontfp=fopen(fntdbfname,"r"); if (fontfp !=NULL) { fontdb=FrameBufferFontDBLoad(fontfp); fclose(fontfp); } if (fontdb==NULL) { fprintf(stderr,"Could not load fonts.\n"); exit(-1); } if (ststr !=NULL) stid=RadarGetID(network,ststr); for (stnum=0;stnum<network->rnum;stnum++) if (stid==network->radar[stnum].id) break; if (stnum==network->rnum) stnum=0; /* now determine our output type */ if (psflg) pflg=1; if (xmlflg) gflg=1; if (ppmflg) gflg=1; if (ppmxflg) gflg=1; if (pngflg) gflg=1; #ifdef _XLIB_ if (xd !=0) { pflg=0; gflg=1; } #endif if (pflg) gflg=0; if ((!gflg) && (!pflg)) pflg=1; plot=PlotMake(); splot=SplotMake(); SplotSetPlot(plot,splot); if (gflg) SplotSetFrameBuffer(splot,&img,fontdb,NULL,NULL); if (pflg) { psdata=PostScriptMake(); PostScriptSetText(psdata,stream,stdout); SplotSetPostScript(splot,psdata,0,xpoff,ypoff); } PlotDocumentStart(plot,"fov_plot",NULL,wdt,hgt,24); PlotPlotStart(plot,"fov_plot",wdt,hgt,24); PlotRectangle(plot,NULL,0,0,wdt,hgt,1,bgcol,0x0f,0,NULL); if (fmapflg) { if ((cylind) || (sqflg)) PlotRectangle(plot,NULL,pad,pad, wdt-2*pad,hgt-2*pad, 1,seacol,0x0f,0,NULL); PlotEllipse(plot,NULL,wdt/2,hgt/2,wdt/2-pad,hgt/2-pad, 1,seacol,0x0f,0,NULL); } if ((grdflg) && (!grdontop)) { MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0, grdcol,0x0f,width,NULL, pgrd,1); } if (fmapflg) { MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1, lndcol,0x0f,0,NULL,pmap,1); MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1, lndcol,0x0f,0,NULL,pmap,3); MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1, seacol,0x0f,0,NULL,pmap,0); } if (ftrmflg) MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad, 1,ftrmcol,0x0f,0,NULL,ptrm,1); if (fofovflg) { for (i=0;i<network->rnum;i++) { if (network->radar[i].id==stid) continue; if (network->radar[i].status !=1) continue; MapPlotPolygon(plot,NULL,pad,pad, wdt-2*pad,hgt-2*pad,1,fofovcol,0x0f,0,NULL,pfov,i); } } if (fcfovflg) { for (i=0;i<network->rnum;i++) { if (network->radar[i].id==stid) continue; if (network->radar[i].status!=0) continue; MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1, fcfovcol,0x0f,0,NULL,pfov,i); } } if (ffovflg) { MapPlotPolygon(plot,NULL,pad,pad, wdt-2*pad,hgt-2*pad,1,ffovcol,0x0f,0,NULL,pfov,stnum); } if (mapflg) { MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,cstcol,0x0f, width,NULL, pmap,1); MapPlotOpenPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,cstcol,0x0f, width,NULL, pmap,2); MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,cstcol,0x0f, width,NULL, pmap,0); } if (ofovflg) { for (i=0;i<network->rnum;i++) { if (network->radar[i].id==stid) continue; if (network->radar[i].status !=1) continue; MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0, ofovcol,0x0f,width,NULL, pfov,i); } } if (cfovflg) { for (i=0;i<network->rnum;i++) { if (network->radar[i].id==stid) continue; if (network->radar[i].status !=0) continue; MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0, cfovcol,0x0f,width,NULL, pfov,i); } } if (dotflg) { int s=0; struct RadarSite *site; float pnt[2]; if (cfovflg | fcfovflg) { for (i=0;i<network->rnum;i++) { if (network->radar[i].id==stid) continue; if (network->radar[i].status !=0) continue; site=RadarYMDHMSGetSite(&(network->radar[i]),yr,mo,dy,hr,mt,sc); pnt[0]=site->geolat; pnt[1]=site->geolon; s=(*tfunc)(sizeof(float)*2,pnt,2*sizeof(float),pnt,marg); if (s==0) PlotEllipse(plot,NULL,pad+pnt[0]*(wdt-2*pad), pad+pnt[1]*(hgt-2*pad),dotr,dotr, 1,fcfovcol,0x0f,0,NULL); } } if (ofovflg | fofovflg) { for (i=0;i<network->rnum;i++) { if (network->radar[i].id==stid) continue; if (network->radar[i].status !=1) continue; site=RadarYMDHMSGetSite(&(network->radar[i]),yr,mo,dy,hr,mt,sc); pnt[0]=site->geolat; pnt[1]=site->geolon; s=(*tfunc)(sizeof(float)*2,pnt,2*sizeof(float),pnt,marg); if (s==0) PlotEllipse(plot,NULL,pad+pnt[0]*(wdt-2*pad), pad+pnt[1]*(hgt-2*pad),dotr,dotr, 1,fofovcol,0x0f,0,NULL); } } if (fovflg) { site=RadarYMDHMSGetSite(&(network->radar[stnum]),yr,mo,dy,hr,mt,sc); pnt[0]=site->geolat; pnt[1]=site->geolon; s=(*tfunc)(sizeof(float)*2,pnt,2*sizeof(float),pnt,marg); if (s==0) PlotEllipse(plot,NULL,pad+pnt[0]*(wdt-2*pad), pad+pnt[1]*(hgt-2*pad),dotr,dotr, 1,ffovcol,0x0f,0,NULL); } } if (fovflg) MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0, fovcol,0x0f,width,NULL, pfov,stnum); if (bndflg) MapPlotOpenPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad, bndcol,0x0f,width,NULL, pbnd,-1); if (trmflg) MapPlotOpenPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad, trmcol,0x0f,width,NULL, ptrm,1); if (tmkflg) MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0, tmkcol,0x0f,width,NULL, ptmk,1); if ((grdflg) && (grdontop)) { MapPlotPolygon(plot,NULL,0,0,wdt-2*pad,hgt-2*pad,0, grdcol,0x0f,width,NULL, pgrd,1); } if ((cylind) || (sqflg)) PlotRectangle(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad, 0,grdcol,0x0f,width,NULL); else PlotEllipse(plot,NULL,wdt/2,hgt/2,wdt/2-pad,hgt/2-pad, 0,grdcol,0x0f,width,NULL); if (tlblflg){ if (lat>0) plot_time_label(plot,pad,pad,wdt-2*pad,hgt-2*pad, 90,flip,tsfx, lon-tme_shft*(! rotflg), (wdt/2)-pad,6, txtcol,0x0f,fontname,fontsize,fontdb); else plot_time_label(plot,pad,pad,wdt-2*pad,hgt-2*pad, -90,flip,tsfx, lon-tme_shft*(! rotflg), (wdt/2)-pad,6, txtcol,0x0f,fontname,fontsize,fontdb); } PlotPlotEnd(plot); PlotDocumentEnd(plot); if (!gflg) exit(0); if (img==NULL) { fprintf(stderr,"Nothing to plot.\n"); exit(-1); } #ifdef _XLIB_ if (xd !=0) { dp=XwinOpenDisplay(display_name,&xdf); if (dp==NULL) { fprintf(stderr,"Could not open display.\n"); exit(-1); } if (xdoff==-1) xdoff=(dp->wdt-img->wdt)/2; if (ydoff==-1) ydoff=(dp->hgt-img->hgt)/2; win=XwinMakeWindow(xdoff,ydoff,img->wdt,img->hgt,0, dp,wname, wname,argv[0],wname,argc,argv,&xdf); if (win==NULL) { fprintf(stderr,"Could not create window.\n"); exit(-1); } XwinFrameBufferWindow(img,win); XwinShowWindow(win); XwinDisplayEvent(dp,1,&win,1,NULL); XwinFreeWindow(win); XwinCloseDisplay(dp); } else { if (xmlflg==1) FrameBufferSaveXML(img,stream,stdout); else if (ppmflg==1) FrameBufferSavePPM(img,stdout); else if (ppmxflg==1) FrameBufferSavePPMX(img,stdout); else FrameBufferSavePNG(img,stdout); } #else if (xmlflg==1) FrameBufferSaveXML(img,stream,stdout); else if (ppmflg==1) FrameBufferSavePPM(img,stdout); else if (ppmxflg==1) FrameBufferSavePPMX(img,stdout); else FrameBufferSavePNG(img,stdout); #endif return 0; }
int main(int argc,char *argv[]) { unsigned int color=0; unsigned int alpha=255; unsigned char nonzero=0; int arg=0; int c=0,v=0; FILE *fp=NULL; FILE *afp=NULL; char *name=NULL; char *atxt=NULL; char *afname=NULL; struct FrameBuffer *img=NULL; struct FrameBuffer *msk=NULL; unsigned char help=0; unsigned char option=0; OptionAdd(&opt,"-help",'x',&help); OptionAdd(&opt,"-option",'x',&option); OptionAdd(&opt,"name",'t',&name); OptionAdd(&opt,"alpha",'t',&atxt); OptionAdd(&opt,"afname",'t',&afname); OptionAdd(&opt,"nz",'x',&nonzero); arg=OptionProcess(1,argc,argv,&opt,NULL); if (help==1) { OptionPrintInfo(stdout,hlpstr); exit(0); } if (option==1) { OptionDump(stdout,&opt); exit(0); } if (arg<argc) { fp=fopen(argv[arg],"r"); if (fp==NULL) { fprintf(stderr,"Error opening file.\n"); exit(-1); } } else fp=stdin; if (afname !=NULL) { afp=fopen(afname,"r"); if (afp==NULL) { fprintf(stderr,"Error opening alpha file.\n"); exit(-1); } } if (atxt !=NULL) { int alen; alen=strlen(atxt); if ((alen>2) && (atxt[0]=='0') && (atxt[1]=='x')) sscanf(atxt+2,"%x",&alpha); else if (atxt[alen-1]=='%') { float aflt; atxt[alen-1]=0; sscanf(atxt,"%g",&aflt); if (aflt<0) aflt=0; if (aflt>100) aflt=100; alpha=255*aflt/100.0; } else alpha=atoi(atxt); if (alpha>255) alpha=255; } color=FrameBufferColor(0,0,0,alpha); while ((img=FrameBufferLoadPPM(fp,name)) !=NULL) { if (afp !=NULL) msk=FrameBufferLoadPPM(afp,name); FrameBufferClear(img,color,0x08); if (nonzero) { for (c=0;c<img->wdt*img->hgt;c++) { v=img->img[c]+img->img[c+img->wdt*img->wdt]+ img->img[c+2*img->wdt*img->wdt]; if (v==0) img->msk[c]=0; } } if (msk !=NULL) memcpy(img->msk,msk->img,img->wdt*img->hgt); FrameBufferSavePNG(img,stdout); FrameBufferFree(img); if (msk !=NULL) FrameBufferFree(msk); img=NULL; msk=NULL; } return 0; }